Транспонировать массив в строки с помощью латинского PIG - PullRequest
0 голосов
/ 30 июня 2018

Как преобразовать элементы ARRY в BAG в несколько строк, например: ниже

Мой вклад:

кортеж, ARRAY_ELEM (32, {(1, EMP, 3271409712), (2, EMP, 3271409712)})

Выход (32,1, EMP, 3271409712) (32,2, эми, 3271409712)

1 Ответ

0 голосов
/ 03 июля 2018

Вам, вероятно, нужно позвонить FLATTEN дважды. Обратите внимание, что FLATTEN на кортеже просто поднимает каждое поле в кортеже до поля верхнего уровня. FLATTEN на сумке производит перекрестное произведение каждой записи в сумке со всеми другими выражениями в GENERATE.

A = load 'test.txt' using PigStorage() as (a0:int, t1:(a1:int, b1 {(a3:int,a4:chararray,a5:chararray)}));
describe A;
B = FOREACH A GENERATE FLATTEN(t1);  
describe B;
C = FOREACH B GENERATE a1, FLATTEN(b1);
describe C;
dump C;

выход

A: {a0: int,t1: (a1: int,b1: {(a3: int,a4: chararray,a5: chararray)})}
B: {t1::a1: int,t1::b1: {(a3: int,a4: chararray,a5: chararray)}}
C: {t1::a1: int,t1::b1::a3: int,t1::b1::a4: chararray,t1::b1::a5: chararray}
(32,1,emp,3271409712)
(32,2,emp,3271409712)
...