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

des4xlb0  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(440)

假设模式如下:

gen_data: {a: chararray,f: chararray}

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

(4,IAB9)

(4,IAB9-7)

(4,IAB1)

(4,IAB9-30)

我想将每个数组元素与其他列一起放在不同的行中。
我无法获得上述所需的输出。请帮我实现这个输出。感谢您的帮助。

4urapxun

4urapxun1#

使用“[”作为分隔符并加载数据。这将为您提供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;

相关问题