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

如何用Apache Iceberg Spark-Java API将数据文件重写为Parquet格式?

解决方案

要通过Spark-Java的Iceberg API将Avro格式的Iceberg表数据重写为Parquet格式,你可以通过在RewriteDataFiles动作中指定写格式参数实现,无需额外复杂操作,具体如下:

核心思路

Iceberg的RewriteDataFiles动作生成新数据文件时,会遵循Iceberg的写配置规则。只需在动作构建器中添加write.format.default参数并指定为parquet,重写过程就会自动生成Parquet格式文件,替换原有的Avro文件。

修改后的代码实现

SparkActions
    .get()
    .rewriteDataFiles(table)
    .filter(Expressions.equal("date", "2020-08-18"))
    .option("target-file-size-bytes", Long.toString(500 * 1024 * 1024)) // 500 MB
    .option("write.format.default", "parquet") // 指定输出格式为Parquet
    .execute();

可选:永久修改表的默认写格式

如果希望该表后续所有写入操作都默认使用Parquet格式,可以先修改表元数据配置,再执行重写:

// 更新表的默认写格式为Parquet
table.updateProperties()
    .set("write.format.default", "parquet")
    .commit();

// 执行数据重写
SparkActions
    .get()
    .rewriteDataFiles(table)
    .filter(Expressions.equal("date", "2020-08-18"))
    .option("target-file-size-bytes", Long.toString(500 * 1024 * 1024))
    .execute();

说明

  • 重写完成后,Iceberg会自动标记旧Avro文件为已删除,后续会通过快照过期机制彻底清理。
  • 重写仅针对filter指定的数据范围,不会影响其他未匹配的数据文件。

内容的提问来源于stack exchange,提问作者apache-northeast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:10:38