Pig袋到元组

2uluyalo  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(396)

我有四列a,b,c,d,其中d列的所有值都相同(例如:'d')数据是

A,B,C,D
1,b,1,d
2,x,3,d
3,y,3,d

我想找到c上的中间值,并存储在列下 Median 其余的a,b,c,d应该和往常一样。1) 使用apache-fu软件包在c上发现中位数(http://datafu.incubator.apache.org/docs/datafu/getting-started.html).
我想要

A,B,C,D,Median
1,b,1,d,3
2,x,3,d,3
3,y,3,d,3

但我明白了

{A: {(A: long)},B: {(B: chararray)},C: {(C: long)},D: {(B: chararray)},Median: (quantile_0_5: double),}

我要把所有的袋子都取下来,用作元组。有人能提出一些建议来获得期望的产出吗?

2mbi3lxu

2mbi3lxu1#

看看bagtotuple自定义项。它需要一个包并将其转换为一个元组,因此您必须为每个包(每个列)调用它一次。它的输出将为每一列提供一个元组,而不是整行的元组,我猜这不是您想要的,所以将 BagToTuple :

input_data = load 'input' using PigStorage(',') as (A: bag{(a: long)}, B: bag{(b: chararray)}, C: bag{(c: long)}, D: bag{(d: chararray)}, Median: bag{(median: double)});
dump input_data;

({(1)},{(b)},{(1)},{(d)},{(3.0)})
({(2)},{(x)},{(3)},{(d)},{(3.0)})
({(3)},{(y)},{(3)},{(d)},{(3.0)})

output = foreach input_data generate FLATTEN(BagToTuple($0)), 
                       FLATTEN(BagToTuple($1)), 
                       FLATTEN(BagToTuple($2)), 
                       FLATTEN(BagToTuple($3)), 
                       FLATTEN(BagToTuple($4));

dump output;

(1,b,1,d,3.0)
(2,x,3,d,3.0)
(3,y,3,d,3.0)

相关问题