Синтаксический анализ 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 (среди прочих), и я не сталкивался с этой конкретной проблемой управления версиями.