'如何分组为'在猪工作?

时间:2015-04-22 20:46:34

标签: apache-pig

我无法理解foreach循环中grouped_data的工作原理。

我们假设我们已经有一个名为grouped_data = group dataset by (emp_id, dept_id); 的变量,定义为:

grouped_data

然后我们想要在with_hours_worked = FOREACH grouped_data GENERATE group AS grp, SUM(dataset.worked_hours) AS hours ; 中迭代每个记录并添加一个聚合列。所以写下以下内容:

group AS grp

我对最后一行中发生的事情感到困惑,尤其是grp部分。 grouped_data是一个元组吗?来自INT_MAX + INT_MIN < 0 ? INT_MAX : -INT_MIN 的行是否已转换为群组?如果是这样,为什么?

1 个答案:

答案 0 :(得分:1)

每当你在Pig中使用group by时,对于每个组都会创建一个由两部分组成的新寄存器:第一部分是包含分组值的元组,第二部分是包含所有值的包该组的价值观。

例如,如果您有以下数据:

user_id, dept_id, blah_1, blah_2
1,41,pig,mapreduce
1,41,spark,apache
2,30,oh,yeah

按user_id和dept_id分组后,您将拥有以下内容:

(1,41),{(pig,mapreduce),(spark,apache)}
(2,30),{(oh,yeah)}

第一部分是Pig调用的group,在这种情况下包含的元组user_iddept_idgroup as grp只是将其重命名为grp ...这不是一个好名字,而是代码正在做的事情!