Как загрузить файл с массивом JSON на строку в Pig Latin

Существующий скрипт создает текстовые файлы с массивом объектов JSON на строку, например,

[{"foo":1,"bar":2},{"foo":3,"bar":4}]
[{"foo":5,"bar":6},{"foo":7,"bar":8},{"foo":9,"bar":0}]
…

Я хотел бы загрузить эти данные в Pig, взорвав массивы и обработав каждый отдельный объект.

Я смотрел на использование JsonLoader в Twitter Elephant Bird безрезультатно. Он не жалуется на JSON, но я получаю "Успешно прочитано 0 записей" при выполнении следующего:

register '/tmp/elephant-bird/core/target/elephant-bird-core-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/hadoop-compat/target/elephant-bird-hadoop-compat-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/pig/target/elephant-bird-pig-4.3-SNAPSHOT.jar';
register '/usr/local/lib/json-simple-1.1.1.jar';

a = load '/path/to/file.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true');
dump a;

Я также пытался загрузить файл как обычно, обрабатывая каждую строку как содержащую один столбец chararray, а затем пытаясь проанализировать его как JSON, но я не могу найти уже существующий UDF, который, кажется, делает свое дело.

Есть идеи?

1 ответ

Решение

Как сказал Дональд, вы должны использовать UDF здесь. Здесь, в Xplenty, мы написали JsonStringToBag для дополнения JsonStringToMap от ElephantBird.

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