1

我正在尝试为 Hive 编写一个作用于 JSON 数组的 Scala UDF——扩展org.apache.hadoop.hive.ql.exec.UDF并依赖于 play-json 的play.api.libs.json.parse.

当尝试从 Hive 中调用它时,我看到java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonToken.id()I.

我不确定原因是什么 - 与杰克逊版本有些不兼容,如果是这样,我该如何解决这个问题?

我绑定的唯一组件/版本是 Hive 1.2。

4

2 回答 2

0

这是杰克逊不兼容的猜测是有道理的。

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

如果恢复到足够旧版本的 Play-JSON 没有意义,那么最简单的解决方法可能是使用不依赖于 Jackson 的 Scala JSON 解析库;Rapture JSON可以与多个后端一起使用,因此可能是一个不错的选择。

于 2016-10-20T21:31:26.470 回答
0

看看 Brickhouse ( http://github.com/klout/brickhouse ) 中的 JSON UDF。Brickhouse 有 UDF 的to_jsonfrom_json,以及一个方便的函数json_mapjson_split可以直接处理地图和数组。

关于您的版本控制问题,Brickhouse 在幕后使用杰克逊,使用版本 1.8.8(以及其他版本),我还没有遇到过这个特定的版本控制问题。

于 2016-10-14T20:19:20.517 回答