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

r8xiu3jd  于 2022-11-19  发布在  其他
关注(0)|答案(3)|浏览(195)

我使用以下代码将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

1.如何生成单个JSON文件而不是每行一个文件?
1.如何避免 *crc文件?
1.如何避免SUCCESS文件?

66bbxpm5

66bbxpm51#

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

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

就我个人而言,我发现输出文件的数量取决于调用write之前所拥有的分区的数量,这一点相当烦人--特别是在使用partitionBy执行write时--但据我所知,目前没有其他方法。
我不知道是否有办法禁用.crc文件--我不知道有什么办法--但是您可以通过在Spark上下文的hadoop配置上设置以下内容来禁用_SUCCESS文件。

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

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

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

显然,生成元数据文件需要一些时间(参见this blog post),但实际上并不那么重要(根据this)。

lztngnrs

lztngnrs2#

只是在上面的答案中有一点更新。要禁用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")
06odsfpq

06odsfpq3#

在.write时忽略crc文件

val hadoopConf = spark.sparkContext.hadoopConfiguration
val fs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)
fs.setWriteChecksum(false)

相关问题