चिंगारी का चयन करें स्तंभ रिटर्न के संदर्भ में पुराने dataframe

0

सवाल

मैं निम्नलिखित कोड का उपयोग करें:

random = [("ABC",xx, 1), 
          ("DEF",yy,1), 
          ("GHI",zz, 0) 
         ]
randomColumns = ["name","id", "male"]
randomDF = spark.createDataFrame(data=random, schema = randomColumns)
test_df = randomDF.select("name", "id")
test_df.filter(f.col("male") == '1').show()

, ऊपर कोड से मैं यह उम्मीद करने के लिए एक त्रुटि में परिणाम के लिए है, क्योंकि test_df मैं न चुनें पुरुष स्तंभ से मूल dataframe. हैरानी की बात है इसके बाद के संस्करण क्वेरी चलाता है बस ठीक है किसी भी त्रुटि के बिना और outputs के निम्नलिखित हैं:

+---------+-------+
|name     |     id|
+---------+-------+
|      abc|     xx|
|      def|     yy|
+---------+-------+

मैं समझने के लिए चाहते हैं के पीछे तर्क क्या चिंगारी कर रही है. के रूप में प्रति चिंगारी प्रलेखन का चयन रिटर्न एक नया dataframe. तो फिर क्यों है यह अभी भी उपयोग करने में सक्षम पुरुष स्तंभ माता-पिता से dataframe.

2

सबसे अच्छा जवाब

3

इस द्वारा के कारण होता है डेग द्वारा उत्पन्न चिंगारी. कुछ ऑपरेटरों (या transformersहै ) कर रहे हैं आलसी मार डाला है, तो वे के लिए मार्ग प्रशस्त चिंगारी का अनुकूलन करने के लिए डेग.

इस उदाहरण में, वहाँ रहे हैं दो प्रमुख चरणों: select (या project में SQL शब्दजाल) पहली, और filter बाद में. लेकिन वास्तव में, जब को क्रियान्वित करने, filter पहले, और फिर selectहै , क्योंकि यह अधिक कुशल है.

आप सत्यापित कर सकते हैं इस निष्कर्ष से explain() विधि:

test_df.filter(f.col("flag") == '1').explain()

यह उत्पादन होगा:

== Physical Plan ==
*(1) Project [dept_name#0, dept_id#1L]
+- *(1) Filter (isnotnull(flag#2L) AND (flag#2L = 1))
   +- *(1) Scan ExistingRDD[dept_name#0,dept_id#1L,flag#2L]
2021-11-24 01:29:03
1

जोड़ने के लिए @chenzhongpu 's का जवाब है, कृपया ध्यान दें कि यदि आप को परिभाषित करने के लिए एक अस्थायी दृश्य के शीर्ष पर अपने test_dfमें , क्वेरी विफल हो जाएगा:

test_df.createOrReplaceTempView("test_df")
spark.sql("select * from test_df where flag = 1").show()
_Traceback (most recent call last): ...
:
pyspark.sql.utils.AnalysisException: u"cannot resolve '`flag`' given input columns: [test_df.dept, test_df.id]; line 1 pos 24;
'Project [*]
 +- 'Filter ('flag = 1)
   +- SubqueryAlias `test_df`
      +- Project [dept#0, id#2L]
         +- LogicalRDD [dept#0, flag#1L, id#2L], false
 _

...क्योंकि एक select (=Project नोड में निष्पादन योजना) जा रहा है में होना करने के लिए फिल्टर (प्रयास के माध्यम से where खण्ड).

2021-11-24 14:25:52

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में