我有这个加入。
A = Join smallTableBigEnoughForInMemory on (F1,F2) RIGHT OUTER, massive on (F1,F2);
B = Join anotherSmallTableBigforInMemory on (F1,F3 ) RIGHT OUTER, massive on (F1,F3);
由于两个连接都使用一个公共密钥,我想知道COGROUP是否可以用于有效地连接数据。请注意,这是一个正确的外部联接。
我确实考虑过在F1上进行组合,但是小表在单键上有多个组合(200-300),所以我没有使用单键加入。
我认为分区可能会有所帮助,但数据有偏差,我不确定如何在Pig
中使用它答案 0 :(得分:1)
您正在寻找Pig的片段复制连接的实现。有关不同连接实现的更多详细信息,请参阅O'Reilly一书Programming Pig。 (特别参见第8章,让猪飞。)
在片段复制连接中,不需要减少阶段,因为大输入的每个记录都通过映射器流式传输,与小输入(完全在内存中)的任何记录匹配,并输出。但是,您必须小心不要使用不适合内存的输入进行此类连接 - Pig将发出错误并且作业将失败。
在Pig的实现中,必须首先给出大输入,因此您实际上将进行左外连接。只需点击“使用'复制'”:
A = JOIN massive BY (F1,F2) LEFT OUTER, smallTableBigEnoughForInMemory BY (F1,F2) USING 'replicated';
B的联接类似。