Как мне разобрать JSON в Pig? - PullRequest
19 голосов
/ 16 февраля 2011

У меня есть много файлов журнала gzip'd в s3, который имеет 3 типа строк журнала: b, c, i.i и c оба являются одноуровневыми json:

{"this":"that","test":"4"}

Тип b является глубоко вложенным json.Я наткнулся на этот гист , в котором рассказывается о том, как собрать банку, чтобы сделать эту работу.Так как мои навыки владения Java меньше, чем звездные, я действительно не знал, что делать отсюда.

{"this":{"foo":"bar","baz":{"test":"me"},"total":"5"}}

Поскольку типы i и c не всегда находятся в одном и том же порядке, это делает указание всего в генерациирегулярное выражение сложно.Возможна ли обработка JSON (в файле gzip'd) с помощью Pig?Я использую любую версию Pig, созданную на экземпляре Amazon Elastic Map Reduce.

Это сводится к двум вопросам: 1) Могу ли я анализировать JSON с Pig (и если да, то как)?2) Если я могу проанализировать JSON (из файла журнала gzip), могу ли я проанализировать вложенные объекты JSON?

Ответы [ 7 ]

16 голосов
/ 04 июля 2012

Pig 0.10 поставляется со встроенными JsonStorage и JsonLoader ().

Свинья документ для загрузки / хранения JSON

8 голосов
/ 02 марта 2011

После многих обходных путей и проработки вещей я смог ответить, чтобы это сделать.Я написал об этом в своем блоге о том, как это сделать.Это доступно здесь: http://eric.lubow.org/2011/hadoop/pig-queries-parsing-json-on-amazons-elastic-map-reduce-using-s3-data/

5 голосов
/ 24 февраля 2011

Свинья поставляется с загрузчиком JSON. Для загрузки вы используете:

A = LOAD ‘data.json’
USING PigJsonLoader ();

Для хранения можно использовать:

STORE INTO ‘output.json’ 
    USING PigJsonLoader();

Однако я не уверен, что он поддерживает данные GZIP ....

3 голосов
/ 27 декабря 2011

Пожалуйста, попробуйте это: https://github.com/a-b/elephant-bird

2 голосов
/ 03 июля 2014

Мы можем сделать это с помощью JsonLoader ... Но мы должны упомянуть схему для ваших данных JSON, иначе это может привести к ошибке. Просто перейдите по ссылке ниже

         http://joshualande.com/read-write-json-apache-pig/

Мы также можемсделайте это, создав UDF для разбора ...

0 голосов
/ 01 марта 2016

Я видел, что использование твиттера elephantbird сильно увеличилось, и оно быстро становится библиотекой goto для разбора json в PIG.

Пример:

DEFINE TwitterJsonLoader com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true ');

JsonInput = LOAD 'input_path' USING TwitterJsonLoader() AS (entity: map[]);

InputObjects = FOREACH JsonInput GENERATE (map[]) entity#'Object' AS   JsonObject;

InputIds = FOREACH InputObjects GENERATE JsonObject#'id' AS id;
0 голосов
/ 09 сентября 2015

Вы можете попробовать использовать загрузчик json в твиттере elephantbird, он динамически обрабатывает данные json. Но вы должны быть очень точны со схемой.

api_data = LOAD 'имя файла' ИСПОЛЬЗОВАНИЕ com.twitter.elephantbird.pig.load.JsonLoader ( '- nestedLoad');

...