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

如何在AWS Glue中设置指定压缩值,手动配置压缩等级与分区?

AWS Glue数据压缩、文件大小控制及分区配置说明

功能支持情况总览

  • 手动设定压缩等级:原生直接支持
  • 控制单压缩文件大小至指定数值(如500MB):可通过配置间接实现,精度可控
  • 按压缩值进行数据分区:无原生支持,需自定义逻辑实现

具体配置实现方法

1. 手动设置压缩等级

AWS Glue底层基于Spark引擎,支持所有Spark兼容的压缩格式(ZSTD、gzip、Snappy、LZO等)的等级自定义,压缩等级越高,压缩比越大、写入耗时越高。
Python脚本配置示例如下:

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

# 假设dyf为你读取源数据得到的DynamicFrame对象
# 写入S3时指定压缩格式与等级
glueContext.write_dynamic_frame.from_options(
    frame = dyf,
    connection_type = "s3",
    connection_options = {"path": "s3://你的存储桶/输出路径/"},
    format = "parquet", # 也可替换为csv、json等你需要的格式
    format_options = {
        "compression": "zstd", # 压缩格式可选zstd、gzip、snappy等
        "compressionLevel": 3 # 压缩等级,ZSTD可选范围1-22,gzip可选范围1-9
    }
)

2. 控制单压缩后文件大小为指定值

没有直接设置单压缩文件大小的参数,可通过以下两种方式间接实现,误差可控制在10%以内:

方法一:通过分区数控制

先小批量测试你选用的压缩格式对应你的数据的实际压缩比,再根据总数据量计算所需分区数。
例:你需要单压缩文件为500MB,测试得ZSTD等级3对你的数据压缩比为2.5:1,即1.25GB原始数据压缩后为500MB;若总原始数据为125GB,则需要100个分区,配置如下:

# 重分区为100个分区
dyf_repartitioned = dyf.repartition(100)
# 再写入S3即可得到100个左右压缩后接近500MB的文件

方法二:通过单文件最大记录数控制

如果是行存储格式(CSV、JSON等),可提前统计500MB压缩后文件对应的记录条数,写入时指定maxRecordsPerFile参数:

glueContext.write_dynamic_frame.from_options(
    frame = dyf,
    connection_type = "s3",
    connection_options = {"path": "s3://你的存储桶/输出路径/"},
    format = "csv",
    format_options = {
        "compression": "gzip",
        "compressionLevel": 5,
        "maxRecordsPerFile": 2000000 # 按500MB压缩文件对应的记录数调整
    }
)

3. 按压缩值分区实现方案

Glue无原生按压缩后数值分区的功能,可通过自定义逻辑实现:先对数据做预采样计算每个逻辑分片的压缩后大小,再调整分区规则。常规使用场景下建议先按业务字段(如日期、地域)做分区,再对每个分区内的数据执行上述的单文件大小控制逻辑,即可实现每个业务分区下的文件大小均符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:54:07