为什么猪群有奇怪的秩序行为

时间:2013-07-04 12:46:57

标签: hadoop mapreduce apache-pig

在hadoop中,如果你想分组和订购某些东西并且你编写java,结果是组密钥也将默认按字典顺序排序,所有这些都是通过一个MR作业完成的,这样你就可以省去另一个订单作业。 / p>

但现在我加入使用Pig,找到一个古怪的东西。

我的输入(test.txt)是:

a  
ab   
abc  
b     
c

我的脚本是:

A=load 'test.txt' as c1:chararray;
B=group A by c1;
dump B;

输出结果为:

(a)   
(b)      
(c)      
(ab)      
(abc) 

为什么它的组密钥顺序取决于字符串长度,但依字母顺序。这样我需要做另一个密钥订单作业,共有两个作业,因为组没有比较插件。

同时为团体和订单提供任何解决方案?我非常感激。

2 个答案:

答案 0 :(得分:1)

实际上,在您的情况下,Pig使用NullTupleWritable作为输出键。由于您的数据为Tuple,因此会调用比较器DefaultTupleRawComparator。在这个类中,它将首先比较长度,然后比较内容。请按照此link获取代码中的详细信息。

答案 1 :(得分:1)

我想我找到答案的原因,请参阅:this blog。 这是猪的性能优化技巧。只适用于纯组,不利于组成一些顺序,因为你不能强迫Pig改变比较器选择规则。