El trabajo de Spark está tardando mucho tiempo en agregar datos a S3.
Estoy ejecutando un trabajo de Spark en EMR e intento convertir un archivo comprimido grande (15 GB) a parquet, pero está tardando mucho en escribir en S3.
Estoy usando una instancia r5 para el nodo principal (1 instancia) y el nodo de datos (3 instancias).
Aquí está mi código.
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, to_date
def main():
spark = SparkSession \
.builder \
.appName("convertidor-csv-a-parquet") \
.config("spark.sql.catalogimplementation", "hive") \
.config("hive.metastore.connect.retries", 3) \
.config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
.enableHiveSupport().getOrCreate()
tgt_filename = 'ALGUN_Prefijo'
src_path = 'RUTA_S3_ORIGEN'
tgt_path = 'BUCKET_DESTINO' + tgt_filename
df = spark.read.csv(src_path, header=True)
partitioned_df = df.repartition(50)
partitioned_df.write.mode('append').parquet(path=tgt_path)
spark.stop()
if __name__ == "main":
main()
Agradeceré cualquier sugerencia.
davy.ai
Parece que el problema principal que estás enfrentando es la lenta velocidad de escritura a S3. Aquí hay algunas sugerencias para mejorar el rendimiento de tu código:
Utiliza un tipo de instancia más potente: Si bien las instancias r5 son generalmente buenas para la mayoría de las tareas, trabajar con grandes conjuntos de datos en EMR podría requerir un tipo de instancia más potente. Considera utilizar un tipo de instancia con mayor rendimiento de red o disco para mejorar la velocidad de escritura.
Utiliza el committer optimizado para S3 de EMRFS: Por defecto, PySpark utiliza el OutputCommitter de Hadoop para escribir datos en S3. Sin embargo, esto puede ser lento e ineficiente para grandes conjuntos de datos. Considera habilitar el committer optimizado para S3 de EMRFS, que está diseñado específicamente para escribir en S3 desde EMR.
Utiliza un formato de archivo diferente: Si bien Parquet es un gran formato de archivo para muchos casos de uso, puede que no sea la mejor opción para tu escenario específico. Considera utilizar un formato de archivo diferente que pueda tener un mejor rendimiento de escritura, como ORC o Avro.
Espero que estas sugerencias ayuden a mejorar el rendimiento de tu trabajo de Spark en EMR.