0

Hive データ ウェアハウスを維持しており、sparkSQL を使用して Hive データベースに対してクエリを実行し、レポートを生成しています。AWS EMR 環境で Spark 1.6 を使用しており、正常に動作しています。環境を Spark 2.0 にアップグレードしたかったのですが、日付フィールドで非常に奇妙なキャスト エラーが発生しました。DATE 型の列を含む既存のテーブルはjava.lang.ClassCastException: java.lang.Integer cannot be cast to java.sql.Date、spark 2.0 でクエリを実行するとエラーをスローします。

以下は、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 では正常に動作します。

これらのテーブルには、構文を使用して spark 1.6 HiveContext が取り込まれINSERT INTOます。

誰もこの問題を見たことがありますか?spark 2.0 を parquet 形式の Date フィールドで動作させるために設定する必要がある構成値はありますか?

4

1 に答える 1

1

spark 2.0.0 では、これは VectorizedParquetRecordReader クラスで失敗します。回避策として、データを読み取る前に以下のコマンドを実行できます。

spark.sql("set spark.sql.parquet.enableVectorizedReader=false")
于 2016-09-01T04:14:28.740 に答える