2015-09-27 67 views
0

我有一個文件,如下hadoop的豬百分比

名稱評分
約翰AA
約翰AA
約翰AA
約翰BB

瑪麗立方厘米
瑪麗立方厘米
mary dd

我想輸出他們的得分centage通過對每個人 分數數量,以便它看起來像這樣

約翰AA 75
約翰BB 25
瑪麗立方厘米66.6
瑪麗DD 33.3

John有3 1aa和BB,所以AA%= 75和BB%= 25 我想這樣做在Hadoop的豬,請幫幫忙,謝謝

-Troy

+0

感謝張貼 - 你可以使用編輯工具,今天你的一些代碼?謝謝。 –

+0

也可以請您提供有關您的問題的更多信息。問題陳述不明確。 –

+0

基本上爲每個名稱(約翰,瑪麗)產生的比例的數量的百分比。例如:john有3個aa和1個bb,那麼aa爲75%,bb爲23%。希望這一點很清楚,還要感謝一個豬場計劃有多少個UDF?如果多於一個,那麼語法是什麼......註冊....謝謝 –

回答

1

你可以試試這個?

輸入:FILE.DAT

john aa 
john aa 
john aa 
john bb 
mary cc 
mary cc 
mary dd 

代碼:

A = LOAD 'file.dat' USING PigStorage(' ') as (name:chararray,score:chararray); 
N = CUBE A BY CUBE(name,score);  
N2 = FOREACH N GENERATE FLATTEN(group) AS (name,score), ((float)COUNT_STAR(cube)) As (totcnt:float); 
N3 = FILTER N2 BY name!='null'; 
N4 = GROUP N3 BY name; 
N5 = FOREACH N4 {                   
fil = order N3 BY score;                 
fil1 = LIMIT fil 1;                  
fil2 = FILTER N3 BY score!='null';              
generate FLATTEN(fil2) AS (name:chararray,score:chararray,indcount:float),FLATTEN(fil1.totcnt) as (totcnt:float); 
} 
N6 = FOREACH N5 GENERATE name,score,(indcount/totcnt)*100; 
DUMP N6; 

輸出:

(john,aa,75.0) 
(john,bb,25.0) 
(mary,cc,66.66667) 
(mary,dd,33.333336) 
+0

哇!強大的CUBE的作品,謝謝你!維涅什。 –

+0

不客氣.. :) –