พยายามที่จะเข้าใจลึกความเข้าใจของออลสปาร์คทำงานและกำลังเล่นอยู่กับ pyspark cli(2.4.0). ฉันกำลังมองหาความแตกต่างระหว่างการใช้ limit(n).show()
แล้ว show(n)
. ฉันต้องจบลงด้วสองคนแตกต่างจากเดิมมากนักการแสดงครั้งสำหรับสองคนมากคล้ายกันค้นข้อมูล. ด้านล่างนี้เป็นคำสั่งของฉันหนีแต่คุณยังมีพ่อ ที่ parquet แฟ้มที่ถูกอ้างอิงในการหัสทางด้านล่างมีเรื่อง 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 กลับหาผล instantaneously. ทดสอบ 2 แสดงความคืบหน้าบาร์กับ 2010 งานและเรื่องเมื่อ 20 นาทีที่สมบูรณ์(ฉันมีหนึ่ง executor)
คำถาม ทำไมถึงทดสอบ 2(กับการจำกัด)แสดงแล้วแย่มากเมื่อเทียบกับเพื่อทดสอบ 1(ไม่จำกัด)? ครูปแบบแถบกำกับแกน y และถูกตั้งค่าเป็นเหมือนกันและที่นั่นแผนของพวกเธอคงต้องเกือบเหมือนกันเป๊ะ