Cercando di ottenere una più profonda comprensione di come scintilla opere e stava giocando con il pyspark cli (2.4.0). Stavo cercando la differenza tra l'utilizzo di limit(n).show()
e show(n)
. Ho finito per ottenere due molto diverse volte per due molto simili query. Di seguito sono riportati i comandi mi sono imbattuto. Il parquet file a cui fa riferimento il codice qui di seguito è di circa 50 colonne e oltre 50gb di dimensioni in remoto 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>>
Si noti che il piano fisico è quasi identico per entrambi test1
e test2
. L'unica eccezione è test2 piano inizia con "CollectLimit 5". Dopo la configurazione di questo ho eseguito test1.show(5)
e test2.show(5)
. Test 1 restituiti i risultati istantaneamente. Test di 2 hanno mostrato una barra di avanzamento con il 2010 le attività e ci sono voluti circa 20 minuti per completare (ho avuto un solo esecutore)
Domanda Perché ha fatto il test 2 (con limite) eseguire in modo poco rispetto al test di 1 (senza limite)? Il set di dati e set di risultati erano identici e il piano fisico era quasi identica.