¿Por qué mi Spark funciona más lento que Python puro? Comparación de rendimiento

Chispa novato aquí. Traté de hacer algo de acción de pandas en mi dataframe usando Spark, y sorprendentemente es más lento que Python puro (es decir, usando el paquete de pandas en Python). Esto es lo que hice:

1) En Chispa:

train_df.filter(train_df.gender == '-unknown-').count() 

Se tarda unos 30 segundos para obtener resultados de nuevo. Pero usar Python toma alrededor de 1 segundo.

2) En Chispa:

 sqlContext.sql("SELECT gender, count(*) FROM train GROUP BY gender").show() 

Lo mismo, toma unos 30 segundos en Spark, 1 segundo en Python.

Varias razones posibles por las que mi Spark es mucho más lento que Python puro:

1) Mi conjunto de datos tiene aproximadamente 220,000 registros, 24 MB, y no es un conjunto de datos lo suficientemente grande como para mostrar las ventajas de escalamiento de Spark.

2) Mi chispa se está ejecutando localmente y debería ejecutarlo en algo como Amazon EC en su lugar.

3) Correr localmente está bien, pero mi capacidad de computación simplemente no lo corta. Es un Macbook de 8 gigas de RAM 2015.

4) La chispa es lenta porque estoy ejecutando Python. Si estoy usando Scala sería mucho mejor. (Con argumento: escuché que mucha gente está usando PySpark muy bien).

¿Cuál de estas es la razón más probable o la explicación más creíble? Me encantaría saber de algunos expertos en Spark. ¡¡Muchas gracias!!

Python definitivamente se desempeñará mejor en comparación con pyspark en conjuntos de datos más pequeños. Verá la diferencia cuando se trate de conjuntos de datos más grandes.

De forma predeterminada, cuando ejecuta spark en contexto de SQL o contexto de Hive, usará 200 particiones de forma predeterminada. Necesitas cambiarlo a 10 o al valor que sea utilizando sqlContext.sql("set spark.sql.shuffle.partitions=10"); . Será definitivamente más rápido que con el predeterminado.

1) Mi conjunto de datos tiene aproximadamente 220,000 registros, 24 MB, y no es un conjunto de datos lo suficientemente grande como para mostrar las ventajas de escalamiento de Spark.

Tienes razón, no verás mucha diferencia en volúmenes más bajos. La chispa también puede ser más lenta.

2) Mi chispa se está ejecutando localmente y debería ejecutarlo en algo como Amazon EC en su lugar.

Para tu volumen puede que no ayude mucho.

3) Correr localmente está bien, pero mi capacidad de computación simplemente no lo corta. Es un Macbook de 8 gigas de RAM 2015.

De nuevo, no importa para el conjunto de datos de 20MB.

4) La chispa es lenta porque estoy ejecutando Python. Si estoy usando Scala sería mucho mejor. (Con argumento: escuché que mucha gente está usando PySpark muy bien).

En pie solo habrá diferencia. Python tiene más sobrecarga de tiempo de ejecución que scala, pero en un clúster más grande con capacidad distribuida no tiene por qué importar