Apache Pig Group / 展平 / 加入

Posted

技术标签:

【中文标题】Apache Pig Group / 展平 / 加入【英文标题】:Apache Pig Group / Flatten / Join 【发布时间】:2015-12-02 13:23:32 【问题描述】:

我有 2 个数据集。

集合 A 有许多事件,每个事件发生在一个日期,每个日期有多个事件。例如:

10/23/2015, event1
10/23/2015, event2
9/17/2014, event3

B 组每个日期都有天气观测。每个日期只有一次观察。例如:

10/23/2015, obs1
10/22/2015, obs2
9/17/2014, obs3

我想为每个事件附上相应日期的天气观测,例如:

10/23/2015, event1, obs1
10/23/2015, event2, obs1
9/17/2014, event3, obs3

我认为这可以通过按日期对集合 A 进行分组,按日期与集合 B 进行内部连接,然后展平结果来实现。

有人可以告诉我这是否是最好的方法,并告诉我要使用的代码吗?谢谢

【问题讨论】:

这些记录是每行一个还是单个记录 3 个元组?或者到目前为止你有什么代码来加载这些数据集? 每行一个,很抱歉造成混淆。我基本上想在 Pig 中执行您在 excel 中称为 vlookup 的操作:从集合 A 中获取一个事件,在集合 B 中查找它的日期,然后从集合 B 中提取观察结果。 【参考方案1】:

不需要分组和展平。只是一个连接,然后你必须删除重复的date 列。

a = LOAD 'datasetA.txt' USING PigStorage(',') as (date:chararray, evt:chararray);
b = LOAD 'datasetB.txt' USING PigStorage(',') as (date:chararray, obs:chararray);
c_join = a JOIN b ON a.date == b.date;
c = FOREACH c_join GENERATE a::date, a::evt, b::obs;

输出

dump c;
(9/17/2014, event3, obs3)
(10/23/2015, event2, obs1)
(10/23/2015, event1, obs1)

【讨论】:

以上是关于Apache Pig Group / 展平 / 加入的主要内容,如果未能解决你的问题,请参考以下文章

展平 python 数据框中的条目,如 Apache PIG 包

apache-Pig map-reduce group by error

Apache Pig GROUP BY ,ORDER BY

如果存在多个值,Apache Pig Group by 和过滤器?

Apache Pig:组操作后去除命名空间前缀 (::)

展平字符串后 Pig 中的模式