2016-10-13 3 views
1

JSON配列に作用するScala UDF for Hiveを作成しようとしています(org.apache.hadoop.hive.ql.exec.UDFを拡張し、play-jsonのplay.api.libs.json.parseに依存しています)。ScalaのハイブUDFでJSONを解析する

これをHiveから呼び出すと、java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonToken.id()Iと表示されます。

原因がわかりません - ジャクソン版と互換性がない場合は、どうすればこの問題を回避できますか?

唯一のコンポーネント/バージョンは、Hive 1.2です。

+0

JSONの依存関係は正しいですか?あなたのUDF jarに正しいバージョンのJSON依存関係が含まれていますか? – Shankar

+0

UDFは、(依存関係を持つ)sbtアセンブリでパッケージ化されています(但し、提供されているものを使用しているHadoop/Hiveは例外です)。スタンドアロンの機能として、テスト/正常に動作します。 – cohoz

+0

UDFファットジャーのジャックソンコアジャーのバージョンは何ですか? – Shankar

答えて

0

Brickhouse(http://github.com/klout/brickhouse)のJSON UDFを見てください。 BrickhouseにはUDFのto_jsonfrom_jsonがあり、マップと配列を直接扱う便利な関数json_mapjson_splitがあります。

あなたのバージョン管理の問題に関して、Brickhouseはバージョン1.8.8(他の中でも)を使用してジャックソンを使用していますが、私はこの特定のバージョン問題に遭遇していません。

0

これはジャクソンの非互換性であると推測されます。

ハイブ1.2はJackson 1.9.2を使用しますが、それ以降のバージョンはPlay-JSONの最近のバージョン(過去2、3年)で使用されています。

古いバージョンのPlay-JSONに戻すことが意味をなさない場合、おそらく最も簡単な回避策は、Jacksonに依存しないScala JSON解析ライブラリを使用することです。 Rapture JSONは複数のバックエンドで使用することができますので、良い選択かもしれません。