Spark任务执行失败:Parquet字典类型不兼容问题咨询
解决方法
1. 校验实际数据与Schema的一致性
尽管你提到新生成的Parquet文件Schema与原有一致,但可能存在隐性类型不匹配:
- 在Databricks中执行
DESCRIBE EXTENDED <table_name>,查看涉及字段的实际存储元数据,确认报错关联的Int字段类型定义无异常 - 抽样检查新Parquet文件的对应字段,排查是否存在字符串、二进制值被错误写入Int列的情况(例如空字符串、非数字字符)
2. 禁用Parquet字典编码
该错误多因Parquet字典编码在ODBC读取场景下的类型兼容问题导致,可在写入Parquet时禁用字典编码:
// Scala 写入示例 df.write .option("parquet.enable.dictionary", "false") .parquet("/path/to/target/location")
或通过SQL建表时指定配置:
CREATE TABLE target_table USING PARQUET OPTIONS (parquet.enable.dictionary 'false') AS SELECT * FROM source_table
3. 强制类型转换并重写数据
若确认数据本身为合法Int值,但字典编码引发解码失败,可强制转换字段类型后重新写入:
CREATE OR REPLACE TABLE corrected_table AS SELECT CAST(problem_column AS INT) AS problem_column, other_column_1, other_column_2 FROM original_table
4. 调整ODBC连接的Parquet读取配置
在ODBC连接字符串中添加以下参数,强制Spark使用兼容的Parquet读取逻辑:
ParquetReaderCompatibilityMode=LEGACY
该参数会切换至旧版Parquet读取模式,规避字典编码的类型解析冲突。
5. 升级Databricks Runtime版本
部分旧版Databricks Runtime存在Parquet字典编码的类型解析Bug,建议升级至最新LTS版本(如11.3 LTS及以上),新版本通常已修复此类兼容性问题。
内容的提问来源于stack exchange,提问作者Parul
相关产品推荐
相关产品推荐

