Spark 2.0 `java.lang.ClassCastException: java.lang.Integer 无法转换为 java.sql.Date` 错误
Spark 2.0 ` java.lang.ClassCastException: java.lang.Integer cannot be cast to java.sql.Date` error
我们正在维护一个 Hive 数据仓库,并使用 sparkSQL 对 hive 数据库进行查询并生成报告。我们在 AWS EMR 环境中使用 Spark 1.6,并且运行良好。
我想将我们的环境升级到 spark 2.0,但我在日期字段中遇到了一个非常奇怪的转换错误。在 spark 2.0 中查询时,包含 DATE 类型列的任何现有 table 都会抛出 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.sql.Date
错误。
这是您可以在我们的 Hive 数据库中找到的 table 的简化示例:
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 中工作正常。
这些 table 使用 INSERT INTO
语法填充了 spark 1.6 HiveContext。
有人见过这个问题吗?是否有我需要设置的配置值才能使 spark 2.0 使用镶木地板格式的日期字段?
在 spark 2.0.0 中,这个失败在 VectorizedParquetRecordReader class。对于解决方法,您可以在读取数据之前执行以下命令。
spark.sql("set spark.sql.parquet.enableVectorizedReader=false")
我们正在维护一个 Hive 数据仓库,并使用 sparkSQL 对 hive 数据库进行查询并生成报告。我们在 AWS EMR 环境中使用 Spark 1.6,并且运行良好。
我想将我们的环境升级到 spark 2.0,但我在日期字段中遇到了一个非常奇怪的转换错误。在 spark 2.0 中查询时,包含 DATE 类型列的任何现有 table 都会抛出 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.sql.Date
错误。
这是您可以在我们的 Hive 数据库中找到的 table 的简化示例:
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 中工作正常。
这些 table 使用 INSERT INTO
语法填充了 spark 1.6 HiveContext。
有人见过这个问题吗?是否有我需要设置的配置值才能使 spark 2.0 使用镶木地板格式的日期字段?
在 spark 2.0.0 中,这个失败在 VectorizedParquetRecordReader class。对于解决方法,您可以在读取数据之前执行以下命令。
spark.sql("set spark.sql.parquet.enableVectorizedReader=false")