Spark 2.4.8查询Parquet表触发AssertionError报错求助
解决Spark 2.4.8查询Parquet表时的AssertionError报错
问题重现
执行Spark SQL统计Parquet表时触发断言失败错误:
spark.sql("select count(1) from edw.result_base").show()
报错信息:
py4j.protocol.Py4JJavaError: An error occurred while calling o69.sql. java.lang.AssertionError: assertion failed
已尝试设置spark.sql.hive.convertMetastoreOrc=true,但问题未解决,完整堆栈指向org.apache.spark.sql.hive.HiveMetastoreCatalog.convertToLogicalRelation方法的断言失败。
原因分析
从堆栈信息看,错误发生在Spark将Hive元仓库中的Parquet表转换为逻辑关系时,断言验证未通过。常见诱因包括:
- 错误配置了Orc格式的转换开关(目标表是Parquet,而非Orc)
- Hive元仓库中的表元数据损坏或格式不匹配
- Spark与Hive元仓库版本兼容性问题
解决方案
修正Parquet格式转换配置:
禁用Hive元仓库到Spark Parquet的转换开关,替换之前的Orc配置:spark.conf.set("spark.sql.hive.convertMetastoreParquet", "false")这个配置会让Spark使用Hive的Parquet处理逻辑,绕过断言验证环节。
修复表元数据:
执行元数据修复命令,刷新表的分区和存储信息:MSCK REPAIR TABLE edw.result_base;如果修复无效,可尝试删除表后重新创建(注意备份数据)。
验证表存储格式:
查询表的详细元数据,确认存储格式正确:DESCRIBE EXTENDED edw.result_base;检查
Storage字段中的InputFormat是否为Parquet相关类(如org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat),若格式不符需重新建表指定正确的存储格式。检查版本兼容性:
确认Spark 2.4.8与Hive元仓库的版本匹配(Spark 2.4.x通常兼容Hive 1.2.x到2.3.x),若版本差异过大,需调整依赖或同步版本。
内容的提问来源于stack exchange,提问作者Arya
相关产品推荐
相关产品推荐

