在Pig中合并两行

时间:2014-12-23 21:21:45

标签: apache-pig

我想为下面的查询编写一个猪脚本。

输入是:

ABC,DEF,,
,,GHI,JKL
MNO,PQR,,
,,STU,VWX

输出应为:

ABC,DEF,GHI,JKL
MNO,PQR,STU,VWX

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

使用本地猪很难解决这个问题。一个选项可以是下载datafu-1.2.0.jar库并尝试以下方法。

<强> input.txt中

ABC,DEF,,
,,GHI,JKL
MNO,PQR,,
,,STU,VWX

<强> PigScript:

REGISTER /tmp/datafu-1.2.0.jar;
DEFINE BagSplit datafu.pig.bags.BagSplit();

A = LOAD 'input.txt' USING PigStorage(',') AS(f1,f2,f3,f4);
B = GROUP A ALL;
C = FOREACH B GENERATE FLATTEN(BagSplit(2,$1)) AS mybag;
D = FOREACH C GENERATE FLATTEN(STRSPLIT(REPLACE(BagToString(mybag),'_null_null_null_null',''),'_',4));
E = FOREACH D GENERATE $2,$3,$0,$1;
DUMP E;

<强>输出:

(MNO,PQR,STU,VWX)
(ABC,DEF,GHI,JKL)

注意: 基于上面的输入格式,我的假设将是第1行最后两个cols将为null,第2行前两个cols将为null,同样对于第3行和第4行也