Apache pig 在清管器中合并两行

Apache pig 在清管器中合并两行,apache-pig,Apache Pig,我想为下面的查询编写一个pig脚本 输入为: ABC,DEF,, ,,GHI,JKL MNO,PQR,, ,,STU,VWX 输出应为: ABC,DEF,GHI,JKL MNO,PQR,STU,VWX 谁能帮帮我吗?用土生土长的猪解决这个问题很困难。一个选项是下载datafu-1.2.0.jar库并尝试以下方法 input.txt ABC,DEF,, ,,GHI,JKL MNO,PQR,, ,,STU,VWX PigScript: REGISTER /tmp/datafu-1.2.0.ja

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

输入为:

ABC,DEF,,
,,GHI,JKL
MNO,PQR,,
,,STU,VWX
输出应为:

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

谁能帮帮我吗?

用土生土长的猪解决这个问题很困难。一个选项是下载
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)
输出:

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)
注意:
基于上述输入格式,我假设第一行最后两个列为空,第二行前两个列为空,第三行和第四行也一样

我也使用了交叉连接和多维数据集,但无法解决它。您的输入是固定格式吗?ie第一行最后两个列将为null,第二行前两个列将为null,第三行最后两个列将为null…?上述脚本的输出是:{(null,null,STU,VWX_MNO_PQR_null_null)(null,null,GHI,JKL_ABC_DEF_null_null)}它对我来说工作正常,我得到了预期的输出。你能粘贴你的猪脚本和输入吗?谢谢回答湿婆。那对我来说不合适。我已经编辑了您的答案,但输出结果仍不符合预期。您正在更改空字符串格式,不要这样做,否则将无法工作。您想将输出打印为$2、$3、$0、$1,对吗?是的,我希望输出为$0、$1、$2、$3。如果我没有改变空字符串格式,那么它也显示为空。请建议