我们正在维护一个Hive数据仓库,并使用sparkSQL对Hive数据库进行查询并生成报告。我们在AWS EMR环境中使用Spark 1.6,运行良好。我想升级我们的环境火花2.0,但我得到一个非常奇怪的铸造错误与日期字段。在spark 2.0中查询任何包含DATE类型的列的现有表都会抛出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工作与日期字段拼花格式?
在spark 2.0.0中,这个在VectorizedParquetRecordReader类中失败。为了解决这个问题,你可以在读取数据之前执行下面的命令。
spark.sql("set spark.sql.parquet.enableVectorizedReader=false")