En essayant d'obtenir une compréhension plus profonde de la façon dont étincelle au travail et a joué avec les pyspark cli (2.4.0). Je cherchais la différence entre l'utilisation de limit(n).show()
et show(n)
. J'ai fini par obtenir deux très différents les délais d'exécution pour les deux requêtes semblables. Voici les commandes que j'ai couru. Le parquet de fichier référencé dans le code ci-dessous a environ 50 colonnes et est de plus de 50 go en taille sur la télécommande 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>>
Notez que le plan physique est presque identique pour les deux test1
et test2
. La seule exception est test2 du plan commence avec "CollectLimit 5". Après cette mise en place, j'ai couru test1.show(5)
et test2.show(5)
. Test 1 retourné les résultats instantanément. Test 2 a montré une barre de progression avec des tâches 2010 et a pris environ 20 minutes pour compléter (je n'avais qu'un exécuteur testamentaire)
Question Pourquoi avez-test 2 (à la limite) effectuer un mal par rapport au test 1 (sans limite)? L'ensemble de données et un jeu de résultats étaient identiques et le plan physique était presque identique.