使用mapreduce在重复项中获取唯一记录

uinbv5nw  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(327)

文件.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) 列1、列2、列3是主键
2) 第4列和第5列是比较键
我有一个文件与重复记录如上所述,在这个重复记录我需要得到只有一个记录中的重复排序的基础上。
预期产量:

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

请帮帮我。提前谢谢。

wdebmtf2

wdebmtf21#

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

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;
68bkxrlz

68bkxrlz2#

您可以尝试以下代码:

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。
希望这有帮助。

相关问题