की कोशिश कर रहा करने के लिए एक गहरी समझ पाने के लिए कैसे स्पार्क का काम करता है और था के साथ खेलने के आसपास pyspark सीएलआई (2.4.0). मैं देख रहा था के बीच अंतर के लिए का उपयोग कर limit(n).show()
और show(n)
. मैं समाप्त हो रही दो बहुत ही अलग अलग प्रदर्शन के समय के लिए दो बहुत ही इसी तरह के प्रश्नों. नीचे दिए गए आदेशों हैं मैं भाग गया । लकड़ी की छत फ़ाइल में संदर्भित कोड के नीचे है के बारे में 50 कॉलम और है पर 50gb में आकार पर दूरस्थ HDFS.
# Create dataframe
>>> df = sqlContext.read.parquet('hdfs://hdfs.host/path/to.parquet') ↵
# Create test1 dataframe
>>> test1 = df.select('test_col') ↵
>>> test1.schema ↵
StructType(List(StructField(test_col,ArrayType(LongType,true),true)))
>>> test1.explain() ↵
== Physical Plan ==
*(1) Project [test_col#40]
+- *(1) FileScan parquet [test_col#40]
Batched: false,
Format: Parquet,
Location: InMemoryFileIndex[hdfs://hdfs.host/path/to.parquet],
PartitionCount: 25,
PartitionFilters: [],
PushedFilters: [],
ReadSchema: struct<test_col:array<bigint>>
# Create test2 dataframe
>>> test2 = df.select('test_col').limit(5) ↵
>>> test2.schema ↵
StructType(List(StructField(test_col,ArrayType(LongType,true),true)))
>>> test2.explain() ↵
== Physical Plan ==
CollectLimit 5
+- *(1) Project [test_col#40]
+- *(1) FileScan parquet [test_col#40]
Batched: false,
Format: Parquet,
Location: InMemoryFileIndex[hdfs://hdfs.host/path/to.parquet],
PartitionCount: 25,
PartitionFilters: [],
PushedFilters: [],
ReadSchema: struct<test_col:array<bigint>>
सूचना है कि शारीरिक योजना लगभग समान है, दोनों के लिए test1
और test2
. केवल अपवाद है test2 की योजना के साथ शुरू होता है "CollectLimit 5". स्थापित करने के बाद यह मैं भागा test1.show(5)
और test2.show(5)
. परीक्षण 1 लौटे परिणाम तुरंत. परीक्षा 2 से पता चला है एक प्रगति पट्टी के साथ 2010 कार्यों ले लिया है और के बारे में 20 मिनट पूरा करने के लिए (मैं केवल एक ही था निष्पादक)
सवाल क्यों परीक्षण 2 के साथ (सीमा) का प्रदर्शन इतना खराब की तुलना में परीक्षण करने के लिए 1 (सीमा के बिना)? डेटा सेट और सेट परिणाम समान थे और शारीरिक योजना लगभग समान था.