这是一个难以回答的问题。 Cross在Pig中实现为合成键的连接。了解交叉的最佳资源是Programming Pig - Page 68
在你的榜样,交叉实际上看起来像
A = foreach tweets generate flatten(GFCross(0,2)), flatten(*);
B = foreach clients generate flatten(GFCross(1,2)), flatten(*);
C = cogroup A by ($0, $1), B by ($0, $1);
crossproduct = foreach C generate flatten(A), flatten(B);
正如书中解释,GFCross是内部UDF。第一个参数是输入数字,第二个参数是输入的总数量。在你的例子中,UDF生成具有(int,int)模式的记录。与第一个参数相同的字段有一个介于0和3之间的随机数。另一个字段的计数范围是0到3.因此,如果您假设A中的第一条记录的随机数为3,并且第一条记录在B具有随机数2,UDF为每个输入生成以下4个元组。
A {(3,0), (3,1), (3,2), (3,3)}
B {(0,2), (1,2), (2,2), (3,2)}
当进行连接时,(3,2)元组加入到(3,2)的元组中B.对于每个输入的每个记录,可以保证有一个且只有一个将匹配并产生记录的人造钥匙的实例。
因此,要回答您的确切答案是什么的问题... reduce键是由GFCross生成的综合键。由于随机数对于每条记录的选择都不相同,因此所产生的连接应该以减速器的均匀分布完成。