当我执行交叉积操作(然后过滤)时,减速机的大小非常不平衡,一些减速机写零输出,而其他减速机则需要几个小时才能完成。以下代码是一个基本示例:
crossproduct = cross tweets, clients;
result = filter crossproduct by text matches CONCAT('.*', CONCAT(keyword, '.*'));
store result into 'result' using PigStorage(' ');
在这种情况下,减速器键是什么?
1条答案
按热度按时间c3frrgcw1#
这是一个很难回答的问题。在pig中,cross是作为合成键上的连接实现的。理解cross最好的资源是编程Pig-第68页
在你的例子中,十字架看起来就像
正如书中所解释的,gfcross是一个内部udf。第一个参数是输入数,第二个参数是输入的总数。在您的示例中,udf生成模式为(int,int)的记录。与第一个参数相同的字段有一个介于0和3之间的随机数。另一个字段从0到3计数。因此,如果假设a中的第一条记录有一个随机数3,而b中的第一条记录有一个随机数2,那么udf将为每个输入生成以下4个元组。
当执行连接时,(3,2)元组被连接到b中的(3,2)元组。对于每个输入中的每个记录,保证只有一个且只有一个人工键示例将匹配并生成一个记录。
所以,要回答你的问题,到底什么是reduce键。。。reduce密钥是gfcross生成的合成密钥。由于每个记录的随机数选择不同,因此产生的连接应在约化子的均匀分布上进行。