反向排序减速键
将Map Output键以相反的顺序输入减速器的最佳方法是什么? 默认情况下,reducer按键的升序接收所有键。 任何帮助或评论广泛赞赏。
简单来说,在正常情况下,如果地图发出密钥1,4,3,5,2,则减速器接收与1,2,3,4,5相同的密钥。 我希望减速机能够获得5,4,3,2,1 。
在Hadoop 1.X中,您可以使用JobConf.setOutputKeyComparatorClass
为输出指定自定义比较器类。
您的比较器必须实现RawComparator
接口 。
使用Hadoop 2.X,这是通过使用Job.setSortComparatorClass
完成的,仍然使用Job.setSortComparatorClass
的实现。
样本,简单代码
class MyKeyComparator extends WritableComparator { protected DescendingKeyComparator() { super(Text.class, true); } @SuppressWarnings("rawtypes") @Override public int compare(WritableComparable w1, WritableComparable w2) { Text key1 = (Text) w1; Text key2 = (Text) w2; return -1 * key1.compareTo(key2); } }
然后将其添加到作业中
job.setSortComparatorClass(MyKeyComparator.class);
您可以根据使用情况更改以下文字类型。
Text key1 = (Text) w1; Text key2 = (Text) w2;
在从映射器中发出密钥之前,可以将密钥乘以-1。 这将导致框架按升序排序,但负值-5,-4,-3,-2,-1然后在reducer中再次乘以-1得到5,4,3,2,1 。 这将导致框架按sudo-descending顺序排序。 在更复杂的排序中,最好编写一个自定义类进行比较,然后在驱动程序类中进行设置。