如何避免在保存 DataFrame 时生成 crc 文件和 SUCCESS 文件?
How to avoid generating crc files and SUCCESS files while saving a DataFrame?
我正在使用以下代码将 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 文件?
如果你想要单个文件,你需要在调用写入之前对单个分区执行coalesce
,所以:
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")
显然,生成元数据文件需要一些时间(参见 this blog post) but aren't actually that important (according to this)。就个人而言,我总是禁用它们并且我没有遇到任何问题。
上面的回答只是一点点更新。要禁用 crc 和 SUCCESS 文件,只需在 spark 会话中设置 属性 如下(示例)
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("spark.sql.warehouse.dir", warehouse_location) \
.enableHiveSupport() \
.getOrCreate()
spark.conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
我正在使用以下代码将 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 文件?
如果你想要单个文件,你需要在调用写入之前对单个分区执行coalesce
,所以:
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")
显然,生成元数据文件需要一些时间(参见 this blog post) but aren't actually that important (according to this)。就个人而言,我总是禁用它们并且我没有遇到任何问题。
上面的回答只是一点点更新。要禁用 crc 和 SUCCESS 文件,只需在 spark 会话中设置 属性 如下(示例)
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("spark.sql.warehouse.dir", warehouse_location) \
.enableHiveSupport() \
.getOrCreate()
spark.conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")