2014-01-19 58 views
1

我有一個文件:要查找元組列表最大次數的名字在PIG

1,Mary,5 
1,Tom,5 
2,Bill,5 
2,Sue,4 
2,Theo,5 
3,Mary,5 
3,Cindy,5 
4,Andrew,4 
4,Katie,4 
4,Scott,5 
5,Jeff,3 
5,Sara,4 
5,Ryan,5 
6,Bob,5 
6,Autumn,4 
7,Betty,5 
7,Janet,5 
7,Scott,5 
8,Andrew,4 
8,Katie,4 
8,Scott,5 
9,Mary,5 
9,Tom,5 
10,Bill,5 
10,Sue,4 
10,Theo,5 
11,Mary,5 
11,Cindy,5 
12,Andrew,4 
12,Katie,4 
12,Scott,5 
13,Jeff,3 
13,Sara,4 
13,Ryan,5 
14,Bob,5 
14,Autumn,4 
15,Betty,5 
15,Janet,5 
15,Scott,5 
16,Andrew,4 
16,Katie,4 
16,Scott,5 

我想大多數出現即最多 名稱答案(斯科特,6)

+0

那麼你會如何去嘗試做到這一點? –

回答

1

有一些你的問題含糊不清。

你究竟想要什麼。

您是否想要降序排列的用戶數列表?

OR

你想剛(斯科特,6),即只有一個最大計數的用戶?

我已經成功地解決了這兩個問題,關於您給出的示例數據。

如果問題是第一類的話,

a = load '/file.txt' using PigStorage(',') as (id:int,name:chararray,number:int); 
g = group a by name; 
g1 = foreach g{ 
     generate group as g , COUNT(a) as cnt; 
}; 
toptemp = group g1 all; 
final = foreach toptemp{ 
     sorted = order g1 by cnt desc; 
     GENERATE flatten(sorted); 
}; 

這會給你按降序排列爲用戶的列表,

(Scott,6) 
(Katie,4) 
(Andrew,4) 
(Mary,4) 
(Bob,2) 
(Sue,2) 
(Tom,2) 
(Bill,2) 
(Jeff,2) 
(Ryan,2) 
(Sara,2) 
(Theo,2) 
(Betty,2) 
(Cindy,2) 
(Janet,2) 
(Autumn,2) 

如果問題是第二類的話,

a = load '/file.txt' using PigStorage(',') as (id:int,name:chararray,number:int); 
g = group a by name; 
g1 = foreach g{ 
     generate group as g , COUNT(a) as cnt; 
}; 
toptemp = group g1 all; 
final = foreach toptemp{ 
     sorted = order g1 by cnt desc; 
     top = limit sorted 1;  
     GENERATE flatten(top); 
}; 

這給我們只有一個結果,

(Scott,6) 

Thanks.I希望它有幫助。

+0

嗨ashu,我想只顯示(斯科特,6),但我想顯示使用MAX函數。你可以在這裏找到相同的幫助來獲得結果 – user234202

+0

我不認爲MAX可以幫助我們在這裏。爲什麼不嘗試第二種解決方案?你測試第二種解決方案嗎?它可以成功運行。你能告訴我這可以用MAX來實現嗎? – ashubhargave