Te recomendamos que pruebes esta respuesta en un ambiente controlado antes de enviarlo a producción, un saludo.
Solución:
Probar
df = spark.read.parquet("/path/to/infile.parquet")
df.write.csv("/path/to/outfile.csv")
Documentación API relevante:
- pyspark.sql.DataFrameReader.parquet
- pyspark.sql.DataFrameWriter.csv
Ambas cosas /path/to/infile.parquet
y /path/to/outfile.csv
deben ser ubicaciones en el sistema de archivos hdfs. Puedes especificar hdfs://...
explícitamente o puede omitirlo, ya que suele ser el esquema predeterminado.
Debes evitar usar file://...
, porque un archivo local significa un archivo diferente para cada máquina en el clúster. Salida a HDFS en su lugar, luego transfiera los resultados a su disco local usando la línea de comando:
hdfs dfs -get /path/to/outfile.csv /path/to/localfile.csv
O mostrarlo directamente desde HDFS:
hdfs dfs -cat /path/to/outfile.csv
Si hay una tabla definida sobre esos archivos de parquet en Hive (o si usted mismo define esa tabla), puede ejecutar una consulta de Hive y guardar los resultados en un archivo CSV. Prueba algo como:
insert overwrite local directory dirname row format delimited fields terminated by ',' select * from tablename;
Sustituto dirname
y tablename
con valores reales. Tenga en cuenta que cualquier contenido existente en el directorio especificado se elimina. Consulte Escritura de datos en el sistema de archivos a partir de consultas para obtener más detalles.
Fragmento para una forma más dinámica, ya que es posible que no sepa exactamente cuál es el nombre de su archivo de parquet, será:
for filename in glob.glob("[location_of_parquet_file]/*.snappy.parquet"):
print filename
df = sqlContext.read.parquet(filename)
df.write.csv("[destination]")
print "csv generated"
Te invitamos a añadir valor a nuestra información asistiendo con tu veteranía en las acotaciones.