如何用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
相关产品推荐
相关产品推荐

