Синтаксический анализ JSON с UDF Hive в Scala

Я пытаюсь написать Scala UDF для Hive, который действует на массив JSON - расширение org.apache.hadoop.hive.ql.exec.UDF и и полагаясь на Play-Json's play.api.libs.json.parse,

При попытке вызвать это из Hive, я вижу java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonToken.id()I,

Я не уверен, что причина здесь - некоторая несовместимость с версиями Джексона, и если так, как я могу обойти это?

Единственный компонент / версия, к которой я привязан - это Hive 1.2.

2 ответа

Предположение, что это несовместимость Джексона, имеет смысл.

В Hive 1.2 используется Jackson 1.9.2, но более поздние версии используются в последних версиях Play-JSON (то есть в последние пару лет).

Если возврат к достаточно старой версии Play-JSON не имеет смысла, то, возможно, самый простой обходной путь - это использовать библиотеку синтаксического анализа Scala JSON, которая не зависит от Джексона; Rapture JSON может использоваться с несколькими бэкэндами и может быть хорошим выбором.

Посмотрите на JSON UDF в Brickhouse ( http://github.com/klout/brickhouse). Кирпичный дом имеет UDF's to_json а также from_json, а также удобные функции json_map а также json_split иметь дело непосредственно с картами и массивами.

Что касается вашей проблемы с версиями, Brickhouse использует Джексона под прикрытием, используя версию 1.8.8 (среди прочих), и я не сталкивался с этой конкретной проблемой управления версиями.

Другие вопросы по тегам