我们正在维护一个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与镶木地板格式的日期字段一起使用?
答案 0 :(得分:1)
在spark 2.0.0中,这个在VectorizedParquetRecordReader类失败了。对于解决方法,您可以在读取数据之前执行以下命令。
spark.sql("set spark.sql.parquet.enableVectorizedReader=false")