使用mapReduce获取重复项之间的唯一记录

时间:2017-03-11 05:21:28

标签: mapreduce apache-pig

FILE.TXT

123,abc,4,Mony,Wa
123,abc,4, ,War
234,xyz,5, ,update
234,xyz,5,Rheka,sild
179,ijo,6,all,allSingle
179,ijo,6,ball,ballTwo

1)column1,column2,colum3是主键

2)column4,column5是比较键

我有一个上面有重复记录的文件在这个重复记录中,我需要根据排序顺序在重复记录中只获得一个记录。

预期输出:

123,abc,4, ,War
234,xyz,5, ,update
179,ijo,6,all,allSingle

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下代码:

data = LOAD 'path/to/file' using PigStorage(',') AS (col1:chararray,col2:chararray,col3:chararray,col4:chararray,col5:chararray);
B = group data by (col1,col2,col3);
C = foreach B {
        sorted = order data by col4 desc;
        first    = limit sorted 1;
        generate group, flatten(first);
};

在上面的代码中,您可以更改sorted变量以选择要考虑排序的列和排序类型。此外,如果您需要多条记录,可以将limit更改为大于1。

希望这有帮助。

答案 1 :(得分:0)

问题不是很清楚,但我知道这就是你所需要的:

A = LOAD 'file.txt' using PigStorage(',') as (column1,column2,colum3,column4,column5);
B = GROUP A BY (column1,column2,colum3);
C = FOREACH B GENERATE FLATTERN(group) as (column1,column2,colum3);
DUMP C;

或者

A = LOAD 'file.txt' using PigStorage(',') as (column1,column2,colum3,column4,column5);
B = DISTINCT(FOREACH A GENERATE column1,column2,colum3);
DUMP B;