Încercarea de a obține o înțelegere mai profundă a modului scânteie de lucrări și a fost în jur de joc cu pyspark cli (2.4.0). Am fost în căutarea pentru diferența între utilizarea limit(n).show()
și show(n)
. Am ajuns să primesc două performanțe foarte diferite ori pentru două foarte similare interogări. Mai jos sunt comenzile de care am fugit. Parchet fișier se face referire în codul de mai jos are aproximativ 50 de coloane și este de peste 50 gb în mărime de la distanță 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>>
Observați că planul fizic este aproape identic pentru ambele test1
și test2
. Singura excepție este test2 planul lui începe cu "CollectLimit 5". După setarea asta am fugit test1.show(5)
și test2.show(5)
. Test 1 returnate rezultatele instantaneu. Testul 2-a aratat o bară de progres cu sarcini 2010 și a durat aproximativ 20 de minute pentru a finaliza (am avut doar un executor)
Întrebare De ce am facut testul de 2 (cu limita) efectua atât de slab în comparație cu testul 1 (fara limita)? Setul de date și setul de rezultate au fost identice și planul fizic a fost aproape identice.