Spark 2.0`java.lang.ClassCastException:java.lang.Integer无法强制转换为java.sql.Date`错误

时间:2016-09-01 00:18:47

标签: apache-spark hive apache-spark-sql apache-spark-2.0

我们正在维护一个Hive数据仓库,并使用sparkSQL对hive数据库进行查询并生成报告。我们在AWS EMR环境中使用Spark 1.6,并且一直运行良好。 我想升级我们的环境以激发2.0但是我在日期字段中遇到了一个非常奇怪的转换错误。包含具有DATE类型的列的任何现有表在spark 2.0中查询时都会抛出java.lang.ClassCastException: java.lang.Integer cannot be cast to java.sql.Date错误。

这是您在我们的Hive数据库中找到的表的简化示例:

CREATE TABLE IF NOT EXISTS test.test_table ( column_1 STRING, column_2 STRING, ) PARTITIONED BY (column_3 DATE) STORED AS PARQUETFILE ;

查询SELECT * FROM test.test_table limit 5因spark 2.0中的上述错误而失败,但在spark 1.6中运行正常。

这些表使用INSERT INTO语法填充spark 1.6 HiveContext。

有没有人见过这个问题?是否有一个配置值,我需要设置以使spark 2.0与镶木地板格式的日期字段一起使用?

1 个答案:

答案 0 :(得分:1)

在spark 2.0.0中,这个在VectorizedParquetRecordReader类失败了。对于解决方法,您可以在读取数据之前执行以下命令。

spark.sql("set spark.sql.parquet.enableVectorizedReader=false")