Hadoop pig加入时间范围
Posted
技术标签:
【中文标题】Hadoop pig加入时间范围【英文标题】:Hadoop pig join with time range 【发布时间】:2013-12-02 20:01:05 【问题描述】:我有两个数据集
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
Attr1 添加到 Master。
我使用 Load in pig 加载了 Master 和 Transaction,我可以加入 ID,但我无法找到 Master.StartTime
24 小时内的 Transactions。
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
【问题讨论】:
请在代码中展示您当前的努力。 编辑您的帖子而不是在 cmets 中发帖 我已按要求编辑帖子 【参考方案1】:你应该能够在加入之后添加一个过滤阶段:
combine = join master by ID left outer, transaction ID
combine = FILTER combine BY ((StartTime - SurveyDate) < (24*60*60*1000));
(假设您的开始时间和调查时间很长,代表自纪元以来的毫秒数)
【讨论】:
克里斯,我还想保留 master 的所有记录,并将 transaction 中的属性添加到 master.ID where ((StartTime - SurveyDate) 属性应该作为连接的一部分 - 但如果您有多个属性(具有相同 (ID,SurveyDate) 键的多个记录),那么您需要检查您是否获得笛卡尔产品然后按ID/日期执行分组以产生一袋属性以上是关于Hadoop pig加入时间范围的主要内容,如果未能解决你的问题,请参考以下文章
Apache Pig/Apache Hive 中给定日期范围的数据汇总