如何避免在保存Dataframe时生成crc文件和成功文件?

exdqitrt  于 2021-07-15  发布在  Hadoop
关注(0)|答案(1)|浏览(587)

我使用以下代码将sparkDataframe保存到json文件

unzipJSON.write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")

输出结果为:

part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8
.part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8.crc
part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8
.part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8.crc
_SUCCESS
._SUCCESS.crc

如何生成单个json文件而不是每行生成一个文件?
如何避免*crc文件?
如何避免成功文件?

qlzsbp2j

qlzsbp2j1#

如果你想要一个文件,你需要做一个 coalesce 在调用write之前将其添加到单个分区,因此:

unzipJSON.coalesce(1).write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")

就我个人而言,我发现输出文件的数量取决于调用之前的分区数量,这相当烦人 write -尤其是如果你做了一个 write 用一个 partitionBy -但据我所知,目前没有其他办法。
我不知道是否有办法禁用.crc文件-我不知道-但是您可以通过在spark上下文的hadoop配置上设置以下内容来禁用\u success文件。

sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

请注意,您可能还希望禁用以下元数据文件的生成:

sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")

显然,生成元数据文件需要一些时间(参见本文),但实际上并不那么重要(根据本文)。就我个人而言,我总是禁用他们,我没有任何问题。

相关问题