PySpark: escupe un solo archivo al escribir en lugar de varios archivos de piezas

¿Hay alguna manera de evitar que PySpark cree varios archivos pequeños al escribir un DataFrame en un archivo JSON?

Si corro:

df.write.format('json').save('myfile.json') 

o

 df1.write.json('myfile.json') 

crea la carpeta llamada myfile y dentro de ella encuentro varios archivos pequeños llamados part-*** , la forma HDFS. ¿Es posible de alguna manera tener un solo archivo en su lugar?

Bueno, la respuesta a tu pregunta exacta es la función de coalesce . Pero como ya se mencionó, no es eficiente en absoluto, ya que obligará a un trabajador a buscar todos los datos y escribirlos secuencialmente.

 df.coalesce(1).write.format('json').save('myfile.json') 

PS Por cierto, el archivo de resultados no es un archivo json válido. Es un archivo con un objeto json por línea.

Esta fue una mejor solución para mí.

rdd.map(json.dumps) .saveAsTextFile(json_lines_file_name)

df1.rdd.repartition(1).write.json('myfile.json')

Estaría bien, pero no está disponible. Compruebe esta pregunta relacionada. https://stackoverflow.com/a/33311467/2843520