2016-10-13 89 views
1

我正在嘗試爲Hive編寫一個Scala UDF,它作用於JSON數組 - 擴展org.apache.hadoop.hive.ql.exec.UDF並依靠play-json的play.api.libs.json.parse在Scala中用Hive UDF解析JSON

當試圖從Hive內部調用此函數時,我看到java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonToken.id()I

我不知道是什麼原因在這裏 - 與傑克遜版本有些不兼容,如果是的話,我該如何解決這個問題?

我綁定的唯一組件/版本是Hive 1.2。

+0

您的JSON依賴項正確嗎?您的UDF jar包含正確版本的JSON依賴項嗎? – Shankar

+0

UDF與其依賴項(使用提供的Hadoop/Hive除外)打包(使用sbt-assembly)。作爲獨立的功能,它可以測試/正常工作。 – cohoz

+0

什麼是傑克遜核心罐在UDF脂肪罐的版本? – Shankar

回答

0

查看Brickhouse中的JSON UDF(http://github.com/klout/brickhouse)。 Brickhouse有UDF的to_jsonfrom_json,以及便利功能json_mapjson_split直接處理地圖和數組。

關於您的版本控制問題,Brickhouse使用版本1.8.8(其他版本)下的jackson,並且我還沒有遇到這個特定的版本控制問題。

0

猜測這是一個傑克遜不兼容是有道理的。

Hive 1.2使用Jackson 1.9.2但Play-JSON的最近版本(即最近幾年)使用更高版本。

如果恢復到足夠舊的Play-JSON版本沒有意義,那麼也許最簡單的解決方法是使用不依賴於Jackson的Scala JSON解析庫; Rapture JSON可用於多個後端,因此可能是一個不錯的選擇。