Hadoop Pig GROUP by id,获取 owner_id?

Posted

技术标签:

【中文标题】Hadoop Pig GROUP by id,获取 owner_id?【英文标题】:Hadoop Pig GROUP by id, get owner_id? 【发布时间】:2013-01-11 13:51:37 【问题描述】:

在 Hadoop 中,我有很多看起来像这样: (item_id,owner_id,counter) - 可能有重复,但item_id 总是有相同的owner_id

我想为每个 item_id 获取 counter 的总和,所以我有以下脚本:

alldata = LOAD '/path/to/data/*' USING D; -- D describes the structure
known_items = FILTER alldata BY owner_id > 0L;
group_by_item = GROUP known_data BY (item_id);
data = FOREACH group_by_item GENERATE group AS item_id, OWNER_ID_COLUMN_SOMEHOW, SUM(known_items.counter) AS items_count;

问题在于,在FOREACH 中,如果我想采用known_items.owner_id - 那将是一个包含所有分组item_id 总和的元组。获得第一个所有者的最有效方法是什么?

【问题讨论】:

【参考方案1】:

如果您假设每个item_id 具有相同的owner_id 是正确的,那么最简单的解决方案会为您提供正确的答案,如果不正确,则会通知您:将owner_id 作为组的一部分。

alldata = LOAD '/path/to/data/*' USING D; -- D describes the structure
known_items = FILTER alldata BY owner_id > 0L;
group_by_item = GROUP known_data BY (item_id, owner_id);
data = FOREACH group_by_item GENERATE FLATTEN(group), SUM(known_items.counter) AS items_count;

【讨论】:

根据定义,每个 item_id 都是相同的。谢谢你的解决方案,我会测试一下。 定义相同,但您永远不知道某处是否出现问题,从而使您的数据与您的期望不符。 :)

以上是关于Hadoop Pig GROUP by id,获取 owner_id?的主要内容,如果未能解决你的问题,请参考以下文章

hadoop-pig学习笔记

为啥 DISTINCT 在 Pig 中比 GROUP BY/FOREACH 快

PIG Group by 避免包

Apache Pig GROUP BY ,ORDER BY

Pig 脚本在 group by 语句中挂起

如何优化 PIG latin 中的 group by 语句?