PySpark:在编写而不是多个部分文件时吐出单个文件

时间:2016-03-22 18:09:26

标签: python amazon-s3 apache-spark pyspark apache-spark-sql

在将DataFrame写入JSON文件时,有没有办法阻止PySpark创建几个小文件?

如果我跑:

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

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

它创建了一个名为myfile的文件夹,在其中我找到了几个名为part-***的小文件,即HDFS方式。是否有可能让它吐出一个文件呢?

3 个答案:

答案 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