Pig 中的“group as”是如何工作的?

sim*_*ing 5 apache-pig

我无法理解循环是如何group by group_name工作的foreach

假设我们已经有一个名为的变量,grouped_data其定义为:

grouped_data = group dataset by (emp_id, dept_id);
Run Code Online (Sandbox Code Playgroud)

然后我们想要迭代每个记录并grouped_data添加聚合列。因此编写如下:

with_hours_worked = FOREACH grouped_data 
                    GENERATE group AS grp, 
                             SUM(dataset.worked_hours) AS hours ;
Run Code Online (Sandbox Code Playgroud)

我对最后一行发生的事情感到困惑,尤其是那group AS grp部分。是grp一个元组吗?线路是否grouped_data转换回组?如果是这样,为什么?

Bal*_*duz 3

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

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

user_id, dept_id, blah_1, blah_2
1,41,pig,mapreduce
1,41,spark,apache
2,30,oh,yeah
Run Code Online (Sandbox Code Playgroud)

按 user_id 和 dept_id 分组后,您将得到以下内容:

(1,41),{(pig,mapreduce),(spark,apache)}
(2,30),{(oh,yeah)}
Run Code Online (Sandbox Code Playgroud)

第一部分是 Pig 所说的,在本例中包含和group的元组。只是将其重命名为...这不是一个好名字,但这就是该代码的作用!user_iddept_idgroup as grpgrp