【问题标题】:Spark Compressing files from Multiple partitions into Single partition with larger filesSpark将多个分区中的文件压缩到具有更大文件的单个分区中
【发布时间】:2022-04-25 15:53:50
【问题描述】:

我想将分散在 s3 上的多个分区层的小 parquet 文件压缩成更大的文件,并将单个分区返回到 s3。

所以在这个例子中,我有 3 个分区层(part1part2part3)。我想把这些数据写出来,只用part2分区写出来

在我第一次运行时,我使用了:

df = spark.read
.option("basePath", "s3://some_bucket/base/location/in/s3/")
.parquet("s3://some_bucket/base/location/in/s3/part1=*/part2=*/part3=*/")

df.write.partitionBy("part2").parquet("s3://some_bucket/different/location/")

这在大多数情况下都有效,但这似乎仍然会创建更小的文件。因为我没有运行coalescerepartition。这让我想到了我的问题。有没有办法可以根据大小/行数轻松地将这些文件压缩成更大的文件?

提前致谢!

【问题讨论】:

    标签: apache-spark partitioning


    【解决方案1】:

    有没有一种方法可以根据大小/行数轻松地将这些文件压缩成更大的文件?

    不是真的。 Spark 不提供任何可用于限制输出文件大小的实用程序,因为每个文件通常对应一个分区。

    所以repartitioningpartitionBy 使用同一列是您最好的选择。

    【讨论】:

      【解决方案2】:

      option("maxRecordsPerFile", 400000)

      在写入文件时使用此选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-03
        • 2015-01-27
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 2017-12-02
        • 2021-02-14
        相关资源
        最近更新 更多