2016-08-27 100 views
0

數據集:
我在(ID,類別)格式的數據集(data.txt中)如下面給出:
提高的效率PIG腳本

01,X 
    02,Y 
    03,X 
    04,Y 
    05,X 
    06,X 
    07,Z 
    08,Z 
    09,X 
    10,Z 



目的:
目標是找出哪個類別具有最大數量的ID而不使用UDF。

一種方法:
我已經試過多次,並得出結論認爲,這可以通過設置PIG報表

A1 = LOAD 'data.txt' USING PigStorage(',') AS (ID:int , Category:chararray); 
A2 = DISTINCT A1; 
A3 = GROUP A2 BY Category; 
A4 = FOREACH A3 GENERATE group AS Category, COUNT(A2.ID) AS Number; 
A5 = GROUP A4 ALL; 
A6 = FOREACH A5 GENERATE MAX(A4.Number); 
A7 = FILTER A4 by Number == A6.$0; 
A8 = FOREACH A7 GENERATE Category; 
DUMP A8; 

請求的followins被achived:
儘管這些聲明得到期望的結果,我不相信它的效率。 由於我是PIG的新手,我不確定是否有任何內置函數可以執行此類任務,以便從表格中輸出最小值或最大值的相應值。

我的要求是要知道這是否可以用更少的步驟數完成。

非常感謝

回答

1

通過計數降序排序分組分組後,並得到最上面的記錄。

A1 = LOAD 'data.txt' USING PigStorage(',') AS (ID:int , Category:chararray); 
A2 = DISTINCT A1; 
A3 = GROUP A2 BY Category; 
A4 = FOREACH A3 GENERATE group AS Category, COUNT(A2.ID) AS Number; 
A5 = ORDER A4 BY Number DESC; 
A6 = LIMIT A5 1; 
DUMP A6.$0; 
+0

該腳本將工作F9如果數據集只有一個最高值,如果您有多個最大值不會產生正確的結果.. –