2012-03-31 97 views
3

排序後,有沒有一種很好的方法可以對Apache Pig中的列進行排名?如果排名處理關係更好。在Apache Pig中的排名

A = LOAD 'file.txt' as (score:int, name:chararray); 
B = foreach A generate score, name order by score; 
.... 

回答

0

我想你可以使用「ORDER BY」操作符。這裏是link

B = ORDER A BY score DESC; 

B = ORDER A BY score ASC; 
+0

不,那不是一回事 - 它只是第一步。如果你說短跑運動員的時間,並按順序排列,你可以看到你進入了第一,第二,第三等。但是它的另一個步驟是真實地說一個實例 - 你是第二小的值。 – Winter 2012-03-31 18:35:08

+0

請您發表一個示例,以便要求更加清晰。 – 2013-01-23 13:11:08

2

嘗試排名操作

A = load 'data' AS (f1:chararray,f2:int,f3:chararray); 

DUMP A; 
(David,1,N) 
(Tete,2,N) 
B = rank A; 

dump B; 
(1,David,1,N) 
(2,Tete,2,N) 

參考https://blogs.apache.org/pig/entry/apache_pig_it_goes_to

+0

它確實處理關係。支持排名和密集排名。參考:https://pig.apache.org/docs/r0.11.0/basic.html#rank'C = rank A通過f1 DESC,f2 ASC;' – user3327034 2015-02-27 08:53:48

0

您應該使用的混合兩種溶液

B = ORDER A BY score DESC; 
C = rank B; 

比方說,你想要的第二大

D = filter C by $0 == 2; 
0

可以在PIG使用等級,它也將處理的關係,但同時將等級將只使用一個減速,所以性能會產生影響。

+0

您可以舉一個例子/用代碼證明這一點嗎?目前還不清楚,如果沒有將其付諸實踐,答案是否有用。 – SuperBiasedMan 2015-08-05 09:32:06