spark libreria español datacamp python pandas apache-spark pyspark spark-dataframe apache-spark-sql

libreria - ¿Por qué Apache-Spark-Python es tan lento localmente en comparación con los pandas?



python apache spark (1)

Porque:

  • Apache Spark es un marco complejo diseñado para distribuir el procesamiento en cientos de nodos, al tiempo que garantiza la corrección y la tolerancia a fallas. Cada una de estas propiedades tiene un costo significativo.
  • Porque el procesamiento en el núcleo puramente en memoria (Pandas) es un orden de magnitud más rápido que el disco y la red (incluso local) de E / S (Spark).
  • Debido a que el paralelismo (y el procesamiento distribuido) agrega una sobrecarga significativa, e incluso con una carga de trabajo óptima (vergonzosamente paralela) no garantiza ninguna mejora en el rendimiento.
  • Porque el modo local no está diseñado para el rendimiento. Se usa para pruebas.
  • Por último, pero no menos importante: 2 núcleos que se ejecutan en 393 MB no son suficientes para ver mejoras en el rendimiento, y el nodo único no brinda ninguna oportunidad de distribución
  • También Spark: número de rendimiento inconsistente en el escalado del número de núcleos , ¿por qué pyspark es mucho más lento para encontrar el máximo de una columna? , ¿Por qué mi Spark funciona más lento que Python puro? Comparación de rendimiento

Puedes seguir así durante mucho tiempo ...

Un novato Spark aquí. Recientemente comencé a jugar con Spark en mi máquina local en dos núcleos usando el comando:

pyspark --master local[2]

Tengo un archivo de texto de 393Mb que tiene casi un millón de filas. Quería realizar alguna operación de manipulación de datos. Estoy usando las funciones de trama de datos integradas de PySpark para realizar operaciones simples como groupBy , sum , max , stddev .

Sin embargo, cuando hago exactamente las mismas operaciones en pandas en el mismo conjunto de datos, parece que los pandas vencen a pyspark por un enorme margen en términos de latencia.

Me preguntaba cuál podría ser una posible razón para esto. Tengo un par de pensamientos

  1. ¿Las funciones integradas hacen el proceso de serialización / deserialización de manera ineficiente? En caso afirmativo, ¿cuáles son las alternativas a ellos?
  2. ¿Es el conjunto de datos demasiado pequeño que no puede superar el costo general de la JVM subyacente en la que se ejecuta la chispa?

Gracias por mirar. Muy apreciado.