¿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