You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

相同输入数据下,Glue动态帧repartition比coalesce生成文件更大的原因

为何Glue动态帧repartition输出的Parquet文件总大小比coalesce更大?

我用相同输入数据,分别调用repartition和coalesce函数写入Parquet Snappy格式文件,代码如下:

glueContext.write_dynamic_frame.from_options(
    frame=df.repartition(nr_of_partition), # df.coalesce(nr_of_partition)
    connection_type="s3",
    connection_options={"path": s3_path, "partitionKeys": ["year", "month"]},
    format="parquet",
    transformation_ctx="write_to_destination",
)

结果发现coalesce的输出文件总大小小于repartition的输出,且两者输出行数一致,无重复数据。原本预期两者总文件大小相近,想知道原因。

Coalesce输出文件列表:
Coalesce输出文件列表

Repartition输出文件列表:
Repartition输出文件列表

核心原因解析

  • 数据重分布逻辑差异
    coalesce仅合并现有小分区,不打乱数据原有分布,同一分区内的列数据保持原有聚集性;而repartition会全量洗牌数据,将数据均匀分配到新分区,彻底破坏了数据的局部相似性。

  • Parquet压缩效率依赖数据聚集性
    Parquet作为列存格式,Snappy压缩的效率高度依赖列数据的连续性和重复度。coalesce保留的数据聚集性让压缩算法能更高效地识别重复值、压缩连续数据;repartition打散后的数据,列值分散,压缩效果大幅下降,直接导致文件体积增大。

  • 分区统计信息的影响
    Glue写入Parquet时会利用分区内的统计信息优化压缩策略。coalesce的分区是原有分区的合并,统计信息准确且完整,能更好指导压缩;repartition生成的新分区需要重新计算统计信息,优化程度不如前者,间接影响了压缩效果。

内容的提问来源于stack exchange,提问作者lin77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:10:48