Estoy tratando de exportar datos de un marco de datos de chispa a un archivo .csv:
df.coalesce(1)\ .write\ .format("com.databricks.spark.csv")\ .option("header", "true")\ .save(output_path)Está creando un nombre de archivo "part-r-00001-512872f2-9b51-46c5-b0ee-31d626063571.csv"
Quiero que el nombre del archivo sea "part-r-00000.csv" o "part-00000.csv"
Como el archivo se crea en AWS S3, estoy limitado en cuanto a cómo puedo usar los comandos os.system.
¿Cómo puedo configurar el nombre del archivo manteniendo el encabezado en el archivo?
¡Gracias!
Bueno, aunque obtuve una calificación de -3 para mi pregunta, aquí publico la solución que me ayudó a abordar el problema. Siendo un aficionado a la tecnología, siempre me preocupo más por el código / lógica que por la gramática. Al menos para mí, un pequeño contexto debería ser suficiente para comprender el problema.
Llegando a la solución:
Cuando creamos un archivo .csv a partir de un dataframe de chispa,
El archivo de salida se llama por defecto part-x-yyyyy donde:
1) x es 'm' o 'r', dependiendo de si el trabajo era solo un trabajo de mapa o reducido 2) yyyyy es el número de tarea del mapeador o reductor, puede ser 00000 o un número aleatorio.
Para cambiar el nombre del archivo de salida, debe ejecutar un comando os.system HDFS.
import os, sys output_path_stage = //set the source folder path here output_path = // set the target folder path here //creating system command line cmd2 = "hdfs dfs -mv " + output_path_stage + 'part-*' + ' ' + output_path + 'new_name.csv' //executing system command os.system(cmd2) Para tu información, si usamos la opción rdd.saveAsTextFile, el archivo se crea sin encabezado. Si usamos coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save(output_path) , el archivo se crea con un nombre de parte x aleatorio. La solución anterior nos ayudará a crear un archivo .csv con encabezado, delimitador junto con el nombre de archivo requerido.