如何在 Pig 中按列删除重复项

How to remove duplicates on a column basis in Pig

谁能帮我从我的 csv 文件中删除旧记录并使用 Pig 保留最近的记录。

EX: 输入

密钥 1 日期

XXXXX P38 17-10-2017

XXXXX P38 2017 年 12 月 10 日

YYYYY P38 11-10-2017

YYYYY P38 23-09-2017

YYYYY P38 14-09-2017

ZZZZZ P38 25-10-2017

ZZZZZ P38 10-10-2017

我的预期输出是

密钥 1 日期

XXXXX P38 17-10-2017

YYYYY P38 11-10-2017

ZZZZZ P38 25-10-2017

并且header也被包含在一个输出中。

请建议我怎样才能做到这一点?

这种情况可以使用嵌套的 foreach,

A = LOAD '....' AS (
B =
    FOREACH (GROUP A BY key1) {
        orderd = ORDER A BY date DESC;
        ltsrow = LIMIT orderd 1;
        GENERATE FLATTEN(ltsrow);
    };
STORE B into 'output' using PigStorage('\t', '-schema');

要了解嵌套 foreach,请看这个, https://shrikantbang.wordpress.com/2014/01/14/apache-pig-group-by-nested-foreach-join-example/ https://community.mapr.com/thread/22034-apache-pig-nested-foreach-explaination

并使用模式保存输出, https://hadoopified.wordpress.com/2012/04/22/pigstorage-options-schema-and-source-tagging/

以下内容适合您。

a = load 'pig.txt' USING PigStorage(' ') AS (name:chararray,code:chararray,x1:chararray);
b = FOREACH a GENERATE name,code,ToDate(x1,'dd-mm-yyyy') AS x1;
grpd = GROUP b BY name;
firstrecords = FOREACH grpd {
        sorted = order b by x1 desc;
        toprecord    = limit sorted 1;
        generate group,FLATTEN(toprecord);
};
dump firstrecords;