Pig的COGROUP运算符如何工作?

时间:2015-01-04 19:18:21

标签: hadoop hive apache-pig bigdata

COGROUP运营商如何在这里工作? 我们是如何以及为什么在最后两行输出中得到空袋子(没有网站详细解释COGROUP中的数据安排)?

A = load 'student' as (name:chararray, age:int, gpa:float);
B = load 'student' as (name:chararray, age:int, gpa:float);
dump B;
(joe,18,2.5)
(sam,,3.0)
(bob,,3.5)

X = cogroup A by age, B by age;
dump X;
(18,{(joe,18,2.5)},{(joe,18,2.5)})
(,{(sam,,3.0),(bob,,3.5)},{})
(,{},{(sam,,3.0),(bob,,3.5)})

1 个答案:

答案 0 :(得分:2)

权威指南中有一个非常明确的例子。我希望下面的代码片段可以帮助您理解组合概念。

<强>咕噜&GT; DUMP A;

(2,领带) (4,涂层) (3,帽) (1,围巾)

<强>咕噜&GT; DUMP B;

(乔,2) (汉克,4) (阿里,0) (前夕,3) (汉克,2)

<强>咕噜&GT; D = COGROUP A $ 0,B BY $ 1;

<强>咕噜&GT; DUMP D;

<强>(0,{},{(阿里,0)})

<强>(1,{(1,围巾)},{})

<强>(2,{(2,领带)},{(乔,2),(汉克,2)})

<强>(3,{(3,帽)},{(前夕,3)})

<强>(4, - {(4,涂层)},{(汉克,4)})

COGROUP为每个唯一的分组键生成一个元组。每个元组的第一个字段 是关键,剩下的字段是来自匹配关系的元组包 键。第一个包包含来自关系A的匹配元组和相同的密钥。 类似地,第二个包包含来自关系B的匹配元组 键。

如果对于特定键,关系没有匹配键,那么该关系的包就是 空的。例如,因为没有人买过围巾(ID为1),所以第二个包里面 该行的元组为空。这是外部联接的示例,这是默认值 输入COGROUP。