在将DataFrame写入JSON文件时,有没有办法阻止PySpark创建几个小文件?
如果我跑:
df.write.format('json').save('myfile.json')
或
df1.write.json('myfile.json')
它创建了一个名为myfile
的文件夹,在其中我找到了几个名为part-***
的小文件,即HDFS方式。是否有可能让它吐出一个文件呢?
答案 0 :(得分:9)
嗯,您确切问题的答案是coalesce
函数。但正如已经提到的那样它根本没有效率,因为它会迫使一个工人获取所有数据并按顺序写入。
df.coalesce(1).write.format('json').save('myfile.json')
P.S。顺便说一下,结果文件不是有效的json文件。它是一个每行有一个json对象的文件。
答案 1 :(得分:0)
这对我来说是一个更好的解决方案。
rdd.map(json.dumps)
.saveAsTextFile(json_lines_file_name)
答案 2 :(得分:-2)
df1.rdd.repartition(1).write.json('myfile.json')
会很好,但不可用。检查这个相关的问题。 https://stackoverflow.com/a/33311467/2843520