Расширить массив с помощью Apache Pig - PullRequest
1 голос
/ 01 марта 2012

Я анализирую данные с помощью Apache pig и не могу найти способ расширить массив, если элементы.Вот схема, с которой я работаю, и пример желаемого результата:

(col1:int, col2:int, items:{ARRAY_ELEM:(name:chararray, total:int)})
input  = (1, 1, {("bird", 5), ("bear", 12), ("wolf", 10)})
output = (1, 1, "bird", 5, "bear", 12, "wolf", 10)

Есть ли способ сделать это преобразование?

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Если вам нужно сделать это преобразование прямо сейчас, возможно, самый простой способ - это сделать UDF на Python или Java (я не знаю ни одного встроенного решения).

Тем не менее, в большинстве случаев лучше сохранять одинаковое количество столбцов в каждой записи (например, хранить массив в виде пакета или кортежа и не "расплющивать" его водна запись).

1 голос
/ 08 марта 2012

Проверьте этот Python UDF, который я написал для этого (надеюсь, скоро станет частью Python PiggyBank). Вы можете использовать это в своих сумках, а затем сгладить их, чтобы получить желаемые результаты, например, если ваш набор данных называется бла, вы сможете зарегистрировать мою функцию и затем сделать что-то вроде:

flattened_blah = FOREACH blah GENERATE item1, item2, FLATTEN(bagToTuple(item3)) AS item4, item5, item6, item7, item8, item9

Кроме того, я почти уверен, DataFu в LinkedIn имеет способ сделать это. Если вы используете Pig и еще не используете его, вам, вероятно, стоит взглянуть на него.

...