Pig 的 COGROUP 运算符如何工作?
Posted
技术标签:
【中文标题】Pig 的 COGROUP 运算符如何工作?【英文标题】:How Pig's COGROUP operator works? 【发布时间】:2015-01-04 19:18:20 【问题描述】: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))
【问题讨论】:
这是您使用的实际数据集和代码吗?如果没有请提供样品 这是取自 [pig.apache.org/docs/r0.13.0/basic.html] 的实际示例 为什么会有Hive
标签?
【参考方案1】:
权威指南中有一个非常清楚的例子。我希望下面的 sn-p 可以帮助你理解 cogroup 的概念。
咕噜声>转储 A;
(2,领带) (4,外套) (3,帽子) (1,围巾)
咕噜声> DUMP B;
(乔,2) (汉克,4) (阿里,0) (夏娃,3) (汉克,2)
grunt> D = COGROUP A BY $0, BY $1;
咕噜声> 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 的匹配元组,它们具有相同的 键。
如果对于一个特定的键,一个关系没有匹配的键,那么这个关系的包是 空。 例如,由于没有人买过围巾(ID 为 1),所以第二个包在 该行的元组为空。这是一个外连接的例子,它是默认的 输入 COGROUP。
【讨论】:
根据规则,如果对于特定键,关系没有匹配键,则该关系的包为空,在我的情况下,关系 A, (sam,,3.0) 第二个字段有空字段,在关系 B 中有等效的空字段。所以输出应该像 (,(sam,,3.0),(bob,, 3.5),(sam,,3.0),(bob,,3.5)),但是为什么我们得到 (,(sam,,3.0),(bob,,3.5) ,).以上是关于Pig 的 COGROUP 运算符如何工作?的主要内容,如果未能解决你的问题,请参考以下文章