2017-03-01 24 views
0

是否可以在PIG中獲得以下輸出?我能否在第一場和第二場使用組合,然後在第三場進行DISTINCT?如何獲得PIG中一組字段的DISTINCT值?

For example 
I have input data 

12345|9658965|52145 
12345|9658965|52145 
12345|9658965|52145 
23456|8541232|96589 
23456|8541232|96585 



I want output something like 

    12345|9658965|52145 
    23456|8541232|96589 
    23456|8541232|96585 

回答

0

方法1:使用DISTINCT

編號:http://pig.apache.org/docs/r0.12.0/basic.html#distinct

DISTINCT操作者應幫助

test = LOAD 'test.csv' USING PigStorage('|'); 
distinct_recs = DISTINCT test; 
DUMP distinct_recs; 

方法2:GROUP BY各個領域

test = LOAD 'test.csv' USING PigStorage('|'); 
grp_all_fields = GROUP test BY ($0,$1,$2); 
uniq_recs = FOREACH grp_all_fields GENERATE FLATTEN(group); 
DUMP uniq_recs; 

這兩種方法都給出共享輸入的預期輸出。

+0

您好,我試過豬的獨特的功能。它也會刪除非明顯的記錄。它只給出23456 | 8541232 | 96585這個實例,而不是兩個。 – pd123

+0

它有幫助,如果是的話,你可以接受這個答案,否則分享面臨的問題 –

+0

@ pd123:你可以分享你試過的代碼,只有一個記錄嗎?對於輸入共享運行,我已經共享的代碼使我獲得預期的輸出。 –

0

嘗試this,其非常相似:

A = LOAD 'test.csv' USING PigStorage('|') as (a1,a2,a3); 
    unique = 
     FOREACH (GROUP A BY a3) { 
      b = A.(a1,a2); 
      s = DISTINCT b; 
      GENERATE FLATTEN(s), group AS a4; 
     };