Pig

2017-11-03 6 views
1

で列単位で重複を削除するにはどのように私のCSVファイルから古いレコードを削除し、最近のレコードを豚を使用して保持するのに役立ちます。Pig

EX:入力

キー1のSTAのDATE

XXXXX P38 17-10-2017

XXXXX P38 2017年12月10日

YYYYY P38 2017年11月10日

YYYYY P38 23-09-2017

YYYYY P38 14-09-2017

ZZZZZ P38 25-10-2017

ZZZZZ P38 2017年10月10日

私の予想される出力は次のようになり

キー1のSTAのDATE

XXXXX P38 17-10-2017

YYYYYP38 11-10-2017

ZZZZZP38 25-10-2017

ヘッダーも出力に含まれます。

どうすればよいですか?

答えて

1

ネストされた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'); 

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

とスキーマと出力を保存するには、これを見て、ネストされたのforeachについて学ぶために、 https://hadoopified.wordpress.com/2012/04/22/pigstorage-options-schema-and-source-tagging/

+0

親愛なるスレシュ、これは完全に私のために働いています。ありがとうございました – Sekhar

+0

うれしいです。答えを受け入れてください。 – Suresh

1

以下はあなたのために働くでしょう。

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;