2016-09-29 16 views
0

私はHiveに日付&のタイムスタンプフィールドを持つ寄木張りテーブルを持っています。私は今、sparkからこのテーブルを読んでみたいですが、寄木細工タイムスタンプの互換性エラーで失敗します。タイムスタンプを持つ寄木細工のハイブテーブルからの読み込み

ハイブのバージョンは1.2.1 &スパークバージョンであるスレッド「メイン」java.lang.UnsupportedOperationExceptionがで1.6.1

例外です:寄木張りのタイムスタンプをサポートしていません。 org.apache.hadoop.hive.ql.ioでorg.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.getObjectInspector(ArrayWritableObjectInspector.java:98) のApp でHIVE-6384 のApp を参照してください。 parquet.serde.ArrayWritableObjectInspector。(ArrayWritableObjectInspector.java:60)

ハイブから読み込もうとしましたが、うまく動作します。しかし、Sparkから読み込んだ場合には失敗します。実行しようとしているクエリは次のとおりです。

import org.apache.spark.sql.hive._ 
val sqlContext = new HiveContext(sc) 
sqlContext.sql("select * from hivetablename limit 10") 

ハイブテーブルは以下のようになります。

CREATE EXTERNAL TABLE hivetablename (col1 string, date_time timestamp, somedate date) PARTITIONED BY (load_date date) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION 's3n://path' 

提案や回避策はありますか?

+0

どのバージョンのハイブとスパークを使用していますか?あなたはこのエラーを与えるコードを貼り付けることができます –

+0

spark.sql.hive.convertMetastoreParquetのconfugurationをfalseに設定します。 falseに設定すると、Spark SQLは組み込みサポートの代わりに寄木張りテーブル用のHive SerDeを使用します。うまくいけば、あなたの問題を解決するはずです。 –

+0

Parquetの設定は、SQLContextのsetConfメソッドを使用するか、SQLを使用してSET key = valueコマンドを実行することによって実行できます。 –

答えて

1

あなたのスパークが参照しているハイブのバージョンを確認してください。古いHiveバージョン(< = Hive 0.13)を参照していないことを確認してください。

+0

これは間違いなく、内部的に参照するハイブのメタストアは0.13.1です。私は新しいバージョン(0.14.0、1.2.1)に変更しようとしましたが、今は別のエラーで失敗します。 - スレッド "main"の例外java.lang.NoSuchMethodException:org.apache.hadoop.hive.conf.HiveConf.getTimeVar(org.apache.hadoop.hive.conf.HiveConf $ ConfVars、java.util.concurrent.TimeUnit) – Akarsh

+0

スパーク1.6の最新バージョンのハイブでテストクラスタをセットアップしようとしましたが、うまくいきました。この問題は、古いバージョンのハイブメタストアと完全に関連しているようです。 – Akarsh

+0

こんにちはAkarshさん、どのバージョンのハイブを使いましたか? – user2814799

関連する問題