我无法理解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
的行是否已转换为群组?如果是这样,为什么?
答案 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_id
和dept_id
。 group as grp
只是将其重命名为grp
...这不是一个好名字,而是代码正在做的事情!