根据Pig中的特定条件删除重复的ID

时间:2014-05-09 09:46:41

标签: apache-pig

我有以下格式的数据:Date,Id,eventDate。现在Id可以重复。 我们只需要选择0< = eventdate -date< = 6的那些行。一个id应该只有一行。每个id的事件日期是不变的。

该日期基本上跨越一年连续四周

例如,我在猪中读到的数据就像

01-03-2014,  33578,  01-03-2014
08-03-2014,  57689,  10-03-2014
15-03-2014,  67890,  21-03-2014
15-03-2014,  57689,  10-03-2014
22-03-2014,  33578,  01-03-2014
22-03-2014,  67890,  21-03-2014
22-03-2014,  33578,  01-03-2104
22-03-2014   67890,  21-03-2014

答案是

01-03-2014,  33578,  01-03-2014
08-03-2014,  57689,  10-03-2014
15-03-2014,  67890,  21-03-2014

基于上述逻辑,每个id只有一行。

1 个答案:

答案 0 :(得分:0)

如果每个ID只能找到一行,为什么不使用条件为0<=eventdate -date <=6的简单过滤器。

编辑: 我确定,有人可以使用魔法udf函数更好地完成它,但是使用BuildIn函数它可能看起来像这样:

a = load 'stack.txt' using PigStorage(',') as (date : chararray, id:chararray, eventdate:chararray);
b = foreach a
  {
  date_yyyy = SUBSTRING(date,8,10);
  date_mm = SUBSTRING(date,3,5);
  date_dd = SUBSTRING(date,0,2);
  eventdate_yyyy = SUBSTRING(TRIM(eventdate),8,10);
  eventdate_mm = SUBSTRING(TRIM(eventdate),3,5);
  eventdate_dd = SUBSTRING(TRIM(eventdate),0,2);
  int_date = (int)(CONCAT(CONCAT(date_yyyy,date_mm),date_dd));
  int_eventdate = (int)(CONCAT(CONCAT(eventdate_yyyy,eventdate_mm),eventdate_dd));
  generate date, id, eventdate, CONCAT(CONCAT(eventdate_yyyy,eventdate_mm), eventdate_dd), int_eventdate - int_date as diff;
  };
c = FILTER b by (diff >= 0 and diff <= 6);

为每个没有(diff >= 0 and diff <= 6)条件的ID提供一行仍然是未解决的问题。
我会尽快得到答案:对于重复的ID要采取哪一行?