Pig 的 COGROUP 运算符如何工作?

How Pig's COGROUP operator works?

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

权威指南中有一个非常清楚的例子。我希望下面的片段能帮助你理解 cogroup 的概念。

grunt> DUMP A;

(2,并列) (4,外套) (3,帽子) (1,围巾)

grunt> DUMP B;

(乔,2) (汉克,4) (阿里,0) (夏娃,3) (汉克,2)

grunt> D = COGROUP A BY $0, B BY $1;

grunt> DUMP D;

(0,{},{(Ali,0)})

(1,{(1,围巾)},{})

(2,{(2,Tie)},{(Joe,2),(Hank,2)})

(3,{(3,Hat)},{(Eve,3)})

(4,{(4,Coat)},{(Hank,4)})

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

如果对于特定键,关系没有匹配键,则该关系的包是 empty. 例如,由于没有人买过一条围巾(ID为1),所以第二个包 该行的元组为空。这是一个外连接的例子,这是默认的 键入 COGROUP。