Hadoop猪加入时间范围

时间:2013-12-02 20:01:06

标签: hadoop apache-pig

我有两个数据集

Master.txt
ID,StartTime
1,2013-04-01 00:01:37
2,2013-04-01 00:01:37

Transaction.txt
ID,SurveyDate,Attr1
1,2013-04-01 00:03:40,Success
2,2013-05-01 00:01:30,Success

我希望将这两个数据集与ID和(SurveyDate-StartTime <24小时)合并,然后将Attr1添加到Master。

我在Pig中使用Load加载了Master和Transaction,我可以在ID上加入,但是我无法找到Master.StartTime后24小时内的交易。

Master.txt有很多记录,其中交易很少。

这是代码

master=load 'hdfs://localhost:9000/user/xyz/contact/master' using PigStorage(',') as (ID,StartTime) 

transaction=load 'hdfs://localhost:9000/user/xyz/contact/transaction' using PigStorage(',') as 
(ID,SurveyDate,Attr1)

combine=join master by ID left outer, transaction ID

到目前为止,我已经有了,因为我从文档中了解到加入数据集时不允许使用条件。所以不确定我将如何添加像Master.StartTime-Transaction.SurveyDate&lt; = 24hrs

这样的东西

1 个答案:

答案 0 :(得分:1)

您应该只能在加入后添加过滤阶段:

combine = join master by ID left outer, transaction ID
combine = FILTER combine BY ((StartTime - SurveyDate) < (24*60*60*1000));

(假设您的开始时间和调查时间很长,代表自纪元以来的ms)