2015-05-26 110 views
0

我有四個列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)在D 上執行組2)使用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),} 

我希望所有被刪除袋和可作爲元組。 有人可以提出一些想要的結果嗎?

+0

你可以分享你代碼? –

回答

0

查看BagToTuple UDF。它需要一個袋子並將其轉換爲一個Tuple,所以您將不得不爲每個行李(每個列)調用一次。這樣做的輸出會給你一個元組每列的,而不是對整個行,我想這不是你想要的一個元組,所以扁平化的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)