当前位置:  开发笔记 > 前端 > 正文

如何避免在保存DataFrame时生成crc文件和SUCCESS文件?

如何解决《如何避免在保存DataFrame时生成crc文件和SUCCESS文件?》经验,为你挑选了1个好方法。

我使用以下代码将spark DataFrame保存到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文件?

    如何避免SUCCESS文件?

Glennie Hell.. 23

如果您需要单个文件,则需要coalesce在调用write之前对单个分区执行操作,因此:

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

就个人而言,我觉得输出文件的数量取决于你在调用之前拥有的分区数量相当令人讨厌write- 特别是如果你做了write一个partitionBy- 但据我所知,目前没有别的办法.

我不知道是否有办法禁用.crc文件 - 我不知道 - 但你可以通过在Spark上下文的hadoop配置上设置以下来禁用_SUCCESS文件.

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

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

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

显然,生成元数据文件需要一些时间(参见此博客文章),但实际上并不重要(根据这一点).就个人而言,我总是禁用它们,我没有任何问题.



1> Glennie Hell..:

如果您需要单个文件,则需要coalesce在调用write之前对单个分区执行操作,因此:

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

就个人而言,我觉得输出文件的数量取决于你在调用之前拥有的分区数量相当令人讨厌write- 特别是如果你做了write一个partitionBy- 但据我所知,目前没有别的办法.

我不知道是否有办法禁用.crc文件 - 我不知道 - 但你可以通过在Spark上下文的hadoop配置上设置以下来禁用_SUCCESS文件.

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

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

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

显然,生成元数据文件需要一些时间(参见此博客文章),但实际上并不重要(根据这一点).就个人而言,我总是禁用它们,我没有任何问题.


问题是为什么我们需要`CRC`和`_SUCCESS`文件?Spark(工作者)节点同时写入数据,这些文件充当验证的校验和.写入单个文件会消除分布式计算的想法,如果生成的文件太大,这种方法可能会失败.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有