Spark写入Delta Table时能否配置使用Parquet Format v2版本?
配置Spark写入Delta Table时指定Parquet版本
结论
可以通过Delta Lake的专属配置参数切换到Parquet 2.0+格式,解决纳秒精度时间戳丢失问题。
具体配置方式
Delta Lake通过控制legacy format开关来切换Parquet版本,禁用旧格式即可启用Parquet 2.0+的特性:
1. 全局Spark配置
在初始化SparkSession或提交任务时添加以下配置:
// Scala 初始化SparkSession示例 val spark = SparkSession.builder() .appName("DeltaParquetV2") .config("spark.sql.parquet.writeLegacyFormat", "false") .config("delta.parquet.writeLegacyFormat", "false") .config("spark.sql.parquet.int96TimestampConversion", "false") // 避免时间戳自动转换 .getOrCreate()
或者通过命令行提交时指定:
spark-submit \ --conf spark.sql.parquet.writeLegacyFormat=false \ --conf delta.parquet.writeLegacyFormat=false \ your-application.jar
2. 单写入任务配置
如果只需要针对特定Delta写入任务生效,可在write阶段指定选项:
df.write .format("delta") .option("parquet.writeLegacyFormat", "false") .save("/path/to/your/delta-table")
注意事项
- 要求Delta Lake版本≥0.7.0、Spark版本≥3.0.0,这些版本原生支持Parquet 2.0+的纳秒精度时间戳。
- 确认DataFrame中的时间戳列使用
TimestampType,Spark 3.0+默认支持纳秒精度存储。 - 禁用legacy format后,生成的Parquet文件无法被仅支持Parquet 1.0的旧版本工具读取,需确保下游系统兼容。
内容的提问来源于stack exchange,提问作者Takreem
相关产品推荐
相关产品推荐

