我有以下格式的数据: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只有一行。
答案 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要采取哪一行?