有没有办法防止 PySpark 在将数据帧写入 JSON 文件时创建多个小文件?
如果我运行:
df.write.format('json').save('myfile.json')
或
df1.write.json('myfile.json')
它创建名为myfile
的文件夹,在其中我找到了几个名为 part-***
的小文件,HDFS 方式。是否有可能让它吐出一个文件?
好吧,你的确切问题的答案是coalesce
函数。但如前所述,它根本没有效率,因为它会迫使一个工人获取所有数据并按顺序写入。
df.coalesce(1).write.format('json').save('myfile.json')
附言顺便说一句,结果文件不是有效的 json 文件。它是一个文件,每行都有一个 json 对象。
这对我来说是一个更好的解决方案。
rdd.map(json.dumps)
.saveAsTextFile(json_lines_file_name)
df1.rdd.repartition(1).write.json('myfile.json')
会很好,但不可用。检查此相关问题。https://stackoverflow.com/a/33311467/2843520