Загрузка JSON с различной схемой в PIG

Я столкнулся с проблемой загрузки набора документов JSON в PIG. У меня есть много json-документов, все они различаются по тем полям, которые у них есть, поля, которые мне нужны, в большинстве документов, и при отсутствии я бы хотел получить нулевое значение.

Я только что скачал и скомпилировал последнюю версию Pig (0.12 прямо из хранилища apache git), просто чтобы убедиться, что это еще не решено.

То, что у меня есть, это документ в формате json:

{"foo":1,"bar":2,"baz":3}

Когда я загружаю это в PIG, используя это

Json1 = LOAD 'test.json' USING JsonLoader('foo:int,bar:int,baz:int');
DESCRIBE Json1;
DUMP Json1;

Я получаю ожидаемые результаты

Json1: {foo: int,bar: int,baz: int}
(1,2,3)

Однако, когда поля находятся в другом порядке в схеме:

Json2 = LOAD 'test.json' USING JsonLoader('baz:int,bar:int,foo:int');
DESCRIBE Json2;
DUMP Json2;

Я получаю нежелательный результат:

Json2: {baz: int,bar: int,foo: int}
(1,2,3)

Это должно было быть

(3,2,1)

Очевидно, что имена полей в определении схемы не имеют ничего общего с именами полей в json.

Что мне нужно, это загрузить определенные поля из файла JSON (со встроенными документами!) В PIG.

Как мне решить это?

1 ответ

Решение

Я думаю, что это известная проблема даже с самой последней версией Pig, так что нет другого способа обойти это, кроме как использовать более мощный JsonLoader.

Вместо этого используйте JSONLoader Elephant Bird, который будет вести себя так, как вы ожидаете - другими словами, соблюдайте порядок полей.

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