0

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

但现在我加入使用 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) 

为什么它有组键顺序取决于字符串长度但字母顺序。那样我需要做另一个键顺序工作,总共两个工作,因为组没有比较器插件。

一次分组和订购的任何解决方案?我将不胜感激。

4

2 回答 2

1

实际上,在您的情况下,PigNullTupleWritable用于输出键。由于您的数据是Tuple,它将调用比较器DefaultTupleRawComparator。在这个类中,它会先比较长度,然后比较内容。按照此链接获取代码中的详细信息。

于 2013-07-04T13:44:24.903 回答
1

我想我找到了答案,请参阅:this blog。这是猪的性能优化技巧。仅适用于纯组,不适用于按某种顺序分组,因为您不能强制 Pig 更改比较器选择规则。

于 2013-07-05T02:01:15.737 回答