Join 如何使用cogroup进行联接

Join 如何使用cogroup进行联接,join,apache-pig,Join,Apache Pig,我有这个加入 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上进行组合,但小表

我有这个加入

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中使用它。您正在寻找Pig的片段复制联接实现。有关不同连接实现的更多详细信息,请参阅O'Reilly手册。(具体见第8章,让猪飞。)

在片段复制连接中,不需要缩减阶段,因为大输入的每条记录都通过映射器流式传输,与小输入(完全在内存中)的任何记录匹配,然后输出。但是,您必须小心不要使用不适合内存的输入进行这种连接——Pig将发出错误,作业将失败

在Pig的实现中,必须首先给出较大的输入,因此实际上您将进行左外连接。只要加上“使用‘复制’”:

B的连接将类似

A = JOIN massive BY (F1,F2) LEFT OUTER, smallTableBigEnoughForInMemory BY (F1,F2) USING 'replicated';