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
请帮帮我。提前谢谢。
答案 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;