如何在pig中以列为单位删除重复项

bsxbgnwa  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(288)

有没有人能帮我从csv文件中删除旧记录,并用pig保存最近的记录。
例如:输入
键1 sta日期
xx第38页2017年10月17日
xx第38页12-10-2017
yyyy第38页11-10-2017
yyyy第38页23-09-2017
yyyy第38页14-09-2017
2017年10月25日
2017年10月10日第38页
我的预期产出是
键1 sta日期
xx第38页2017年10月17日
yyyy第38页11-10-2017
2017年10月25日
输出中还应包括标题。
请建议我如何做到这一点?

8oomwypt

8oomwypt1#

嵌套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/httpshttp://community.mapr.com/thread/22034-apache-pig-nested-foreach-explaination
在用模式保存输出时,https://hadoopified.wordpress.com/2012/04/22/pigstorage-options-schema-and-source-tagging/

kcwpcxri

kcwpcxri2#

下面将为您工作。

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;

相关问题