我有一个包含7个字段的关系,想要转换成下面的输出。
输入:
(x,y,10,z,20,a,30) ->(chararray,chararray,double,chararray,double,chararray,double)
输出应如下所示..
(x,y,10)
(x,z,20)
(x,a,30)
你能不能让任何人知道如何实现这个......
答案 0 :(得分:1)
您使用了正确的功能TOBAG.TOBAG(*)表示在所有字段上应用TOBAG。 CONCAT需要转换为行的字段然后FLATTEN连接字段。
注意:对于少数字段使用double,因此您将看到小数精度,并且字段被加载为double。
A = LOAD 'test7.txt' USING PigStorage(',') AS (f1:chararray,f2:chararray,f3:double,f4:chararray,f5:double,f6:chararray,f7:double);
B = FOREACH A GENERATE f1,FLATTEN(TOBAG(CONCAT(f2,CONCAT(',',(chararray)f3)),CONCAT(f4,CONCAT(',',(chararray)f5)),CONCAT(f6,CONCAT(',',(chararray)f7))));
DUMP B;