Apache pig 如何';分组为';在猪圈工作?

Apache pig 如何';分组为';在猪圈工作?,apache-pig,Apache Pig,我很难理解一组一组的\u name如何在foreach循环中工作 假设我们已经有一个名为grouped\u data的变量,它被定义为: grouped_data = group dataset by (emp_id, dept_id); 然后,我们希望在分组的\u数据中迭代每个记录,并添加一个聚合列。所以写了以下内容: with_hours_worked = FOREACH grouped_data GENERATE group AS grp,

我很难理解
一组一组的\u name
如何在
foreach
循环中工作

假设我们已经有一个名为
grouped\u data
的变量,它被定义为:

grouped_data = group dataset by (emp_id, dept_id);
然后,我们希望在
分组的\u数据中迭代每个记录,并添加一个聚合列。所以写了以下内容:

with_hours_worked = FOREACH grouped_data 
                    GENERATE group AS grp, 
                             SUM(dataset.worked_hours) AS hours ;

我对最后一行的内容感到困惑,尤其是
组作为grp
部分。
grp
是元组吗?
分组数据中的行是否转换回组?如果是,原因是什么?

每当您在Pig中使用
group by
时,将为每个组创建一个由两部分组成的新寄存器:第一部分是一个元组,其中包含按其分组的值,第二部分是一个包,其中包含该组的所有值

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

user_id, dept_id, blah_1, blah_2
1,41,pig,mapreduce
1,41,spark,apache
2,30,oh,yeah
按用户id和部门id分组后,您将获得以下信息:

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

第一部分是Pig所称的
group
,在本例中,元组包含
user\u id
dept\u id
。作为grp的
组只需将其重命名为
grp
。。。不是一个好名字,但这就是代码所做的

以下是中的相关页面。