PIG:将数组元素拆分为不同的行

时间:2016-07-13 07:29:35

标签: arrays apache-pig flatten

假设架构如下:

gen_data: {a: chararray,f: chararray}

输入: (4,[IAB9, IAB9-7, IAB1, IAB9-30])

所需的输出:

(4,IAB9)

(4,IAB9-7)

(4,IAB1)

(4,IAB9-30)

我想将每个数组元素与其他列一起放在不同的行中。

我无法获得上述所需的输出。请帮我实现这个输出。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

使用'['作为分隔符并加载数据。这会给你 4,和IAB9,IAB9-7,IAB1,IAB9-30]。删除第一列中的第二列和']'。然后使用STRSPLIT或TOKENIZE和TOBAG

A = LOAD 'data.txt' USING PigStorage('[') AS (f1:chararray,f2:chararray);
B = FOREACH A GENERATE REPLACE(f1,',',''),REPLACE(f2,']','');
C = FOREACH B GENERATE $0,FLATTEN(STRSPLIT($1,','));
D = FOREACH C GENERATE $0,FLATTEN(TOBAG($1,$2,$3,$4)); -- Try TOBAG(*) if this doesn't work
DUMP D;