pig的cogroup操作符是如何工作的?

yrwegjxp  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(460)

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)})
gmxoilav

gmxoilav1#

在权威指南中有一个非常明确的例子。我希望下面的代码片段能帮助您理解cogroup的概念。
咕哝>倾倒;
(2,领带)(4,外套)(3,帽子)(1,围巾)
呼噜声>垃圾场b;
(乔,2)(汉克,4)(阿里,0)(伊芙,3)(汉克,2)
grunt>d=cogroup a乘以$0,b乘以$1;
咕噜声>d;
(0,{},{(ali,0)})
(1,{(1,围巾)},{})
(2,{(2,领带)},{(乔,2),(汉克,2)})
(3,{(3,帽子)},{(夏娃,3)})
(4,{(4,外套)},{(汉克,4)})
cogroup为每个唯一的分组键生成一个元组。每个元组的第一个字段是键,其余字段是来自与匹配键的关系的元组包。第一个包包含关系a中具有相同键的匹配元组。类似地,第二个包包含关系b中具有相同键的匹配元组。
如果对于特定的键,关系没有匹配的键,则该关系的包为空。例如,由于没有人买过围巾(id为1),所以该行元组中的第二个包是空的。这是一个外部联接的示例,它是cogroup的默认类型。

相关问题