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

Posted

技术标签:

【中文标题】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 【发布时间】:2016-09-01 00:18:47 【问题描述】:

我们正在维护一个 Hive 数据仓库,并使用 sparkSQL 对 hive 数据库进行查询并生成报告。我们在 AWS EMR 环境中使用 Spark 1.6,并且运行良好。 我想将我们的环境升级到 spark 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 INTOsyntax 填充 spark 1.6 HiveContext。

有人见过这个问题吗?是否需要设置一个配置值才能让 spark 2.0 使用镶木地板格式的日期字段?

【问题讨论】:

似乎已经有一个错误文件,(issues.apache.org/jira/browse/SPARK-17354) 【参考方案1】:

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

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

【讨论】:

以上是关于Spark 2.0 `java.lang.ClassCastException:java.lang.Integer 无法转换为 java.sql.Date` 错误的主要内容,如果未能解决你的问题,请参考以下文章

spark 学习笔记-spark2.2.0

社区分享 | Spark 玩转 TensorFlow 2.0

Spark 2.0 设置罐子

Spark 2.0:绝对 URI 中的相对路径(spark-warehouse)

Java基础java类加载过程与反射机制

Ubuntu下安装Spark3.2.0教程