es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escribir un archivo csv/hive en Spark tarda demasiado tiempo y el rendimiento no cumple con los estándares de referencia.

Tengo un problema muy simple con Spark, pero hay muy poca información en la web. Me he encontrado con este problema utilizando tanto pyspark como scala.

El problema es que lleva mucho tiempo guardar el archivo csv/hive.

Aquí hay un código muy simple que tengo.

spark = SparkSession.
sql = ”’
select * from some_table
”’
df = spark.sql(sql)
df.write.csv(path)

Este código es muy simple, pero un volumen de 200 000 datos puede tardar unos 30-40 minutos y un volumen de 10 millones de datos puede tardar horas. Incluso la operación “repartition(1)” no mejora significativamente el rendimiento de escritura. “saveAsTable” (a hive) puede ser mejor, pero sigue siendo una cantidad de tiempo inaceptable, y después de todo, es mucho más rápido usar hive directamente. Pero hive es difícil de manejar como un proyecto grande.

Mi pregunta es:

  1. ¿Hay alguna manera de mejorar el rendimiento?
  2. ¿Cuál es la línea base de rendimiento? ¿Cuál es el tiempo aproximado para 1 millón de datos en qué configuración?
Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Apache Spark y Hive, aquí van mis sugerencias para mejorar el rendimiento de guardar archivos CSV/Hive en Spark:

    1. Utiliza un formato más óptimo para guardar los datos – Spark proporciona varios formatos de datos eficientes como Parquet, ORC y Avro, que pueden mejorar significativamente el rendimiento de las operaciones de guardado de datos. Estos formatos están optimizados en columnas y comprimidos, lo que reduce la cantidad de datos que se necesitan escribir en el disco y puede acelerar las lecturas. Puedes convertir el DataFrame al formato deseado utilizando el método df.write.format(). Por ejemplo, df.write.parquet(path).
    2. Reconfigura los datos – Spark escribe los datos de forma paralela, por lo que si los datos no están bien configurados, puede causar una distribución desequilibrada de los datos y ralentizar las operaciones de escritura. Puedes intentar reconfigurar los datos utilizando el método df.repartition() para distribuir uniformemente los datos en los nodos. Por ejemplo, df.repartition(10).write.csv(path).

    3. Configura la escritura – Spark proporciona varias opciones de configuración que se pueden ajustar para mejorar el rendimiento de la escritura, como el número de particiones, el códec de compresión y los ajustes de memoria. Puedes establecer estas opciones utilizando el parámetro option en el método df.write. Por ejemplo, df.write.option("compression", "snappy").option("maxRecordsPerFile", 10000).csv(path).

    En cuanto al rendimiento base, depende de varios factores como la configuración del hardware, el tamaño de los datos y la complejidad de las operaciones de datos. Sin embargo, una regla general es que guardar 1 millón de filas de datos en formato CSV debería tardar alrededor de 1-2 minutos en un sistema de 4 núcleos/16 GB de RAM con discos locales. Utilizar un formato más óptimo como Parquet o ORC debería reducir significativamente este tiempo.

Comments are closed.