Spark3.2写入Spark2.3.1格式Parquet文件的方法咨询
解决Spark 3.2写入Parquet与Dremio 20.4兼容问题
要让Spark 3.2生成与Spark 2.3.1格式一致的Parquet文件,可通过以下配置项调整,无需手动编写Parquet文件:
核心兼容性配置
在Spark写入Parquet时,添加以下配置参数:
// Scala示例 spark.conf.set("spark.sql.parquet.writeLegacyFormat", "true") spark.conf.set("spark.sql.parquet.int96RebaseModeInWrite", "LEGACY") spark.conf.set("spark.sql.parquet.datetimeRebaseModeInWrite", "LEGACY")
# Python示例 spark.conf.set("spark.sql.parquet.writeLegacyFormat", "true") spark.conf.set("spark.sql.parquet.int96RebaseModeInWrite", "LEGACY") spark.conf.set("spark.sql.parquet.datetimeRebaseModeInWrite", "LEGACY")
配置说明
spark.sql.parquet.writeLegacyFormat: 开启后,Spark会使用旧版Parquet写入逻辑,与Spark 2.x生成的Parquet格式对齐,包括元数据结构和编码方式。spark.sql.parquet.int96RebaseModeInWrite: 设置为LEGACY时,会沿用Spark 2.x的INT96时间戳存储方式,避免因时间戳基准差异导致的读取错误。spark.sql.parquet.datetimeRebaseModeInWrite: 同样设置为LEGACY,确保日期时间类型的存储与Spark 2.3.1兼容,解决新旧版本日期时间序列化的差异问题。
额外注意事项
- 数据类型检查: Spark 3.x新增的部分数据类型(比如复杂类型的新特性)可能在Spark 2.3.1或Dremio 20.4中不支持,需提前将这些类型转换为兼容的旧版类型。
- 验证步骤: 写入Parquet后,先用Spark 2.3.1读取验证格式兼容性,再测试Dremio的读取情况,确保没有元数据或数据解析错误。
内容的提问来源于stack exchange,提问作者Prem S
相关产品推荐
相关产品推荐

