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 中给定日期范围的数据汇总

基于感兴趣的日期范围作为参数输入限制在 Pig Latin 中加载日志文件

使用 Apache Hadoop Pig 内连接两个数据集

加入带有日期范围的熊猫时间序列

如何加入范围范围?

如何将单个日期列加入时间范围表