我无法理解循环是如何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转换回组?如果是这样,为什么?
每当您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
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |