Tratando de obtener una comprensión más profunda de cómo la chispa de obras y estaba jugando con el pyspark cli (2.4.0). Yo estaba buscando la diferencia entre el uso de limit(n).show()
y show(n)
. Acabé dos muy diferentes los tiempos de rendimiento para los dos muy similares a las consultas. A continuación se muestran los comandos que funcionó. El parqué de archivo que se hace referencia en el código de abajo tiene alrededor de 50 columnas y más de 50 gb en tamaño en 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>>
Observe que el plano físico es casi idéntico para ambos test1
y test2
. La única excepción es test2 del plan comienza con "CollectLimit 5". Después de esta configuración me encontré test1.show(5)
y test2.show(5)
. Prueba 1 devuelve los resultados al instante. Prueba 2 mostró una barra de progreso con tareas de 2010 y tomó cerca de 20 minutos para completar (yo sólo tenía una ejecutor)
Pregunta ¿Por qué se hizo la prueba 2 (con límite) realizar tan mal en comparación con la prueba 1 (sin límite)? El conjunto de datos y un conjunto de resultados fueron idénticos y el plan físico era casi idéntico.