如何在 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;
谁能帮我从我的 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;