pig叉积减缩键

uwopmtnx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(297)

当我执行交叉积操作(然后过滤)时,减速机的大小非常不平衡,一些减速机写零输出,而其他减速机则需要几个小时才能完成。以下代码是一个基本示例:

crossproduct = cross tweets, clients;

result = filter crossproduct by text matches CONCAT('.*', CONCAT(keyword, '.*'));

store result into 'result' using PigStorage(' ');

在这种情况下,减速器键是什么?

c3frrgcw

c3frrgcw1#

这是一个很难回答的问题。在pig中,cross是作为合成键上的连接实现的。理解cross最好的资源是编程Pig-第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)元组被连接到b中的(3,2)元组。对于每个输入中的每个记录,保证只有一个且只有一个人工键示例将匹配并生成一个记录。
所以,要回答你的问题,到底什么是reduce键。。。reduce密钥是gfcross生成的合成密钥。由于每个记录的随机数选择不同,因此产生的连接应在约化子的均匀分布上进行。

相关问题