將Map Output鍵以相反順序獲取到Reducer的最佳方法是什麼?默認情況下,減速器以按鍵的升序接收所有的鍵。任何幫助或意見廣泛讚賞。反向分類Reducer鍵
在簡單的話,在正常情況下,如果在地圖發射鍵1,4,3,5,2減速器接收相同1,2,3,4,5。我想減速機接受5,4,3,2,1。
將Map Output鍵以相反順序獲取到Reducer的最佳方法是什麼?默認情況下,減速器以按鍵的升序接收所有的鍵。任何幫助或意見廣泛讚賞。反向分類Reducer鍵
在簡單的話,在正常情況下,如果在地圖發射鍵1,4,3,5,2減速器接收相同1,2,3,4,5。我想減速機接受5,4,3,2,1。
在Hadoop 1.X中,您可以使用JobConf.setOutputKeyComparatorClass
爲輸出指定自定義比較器類。您的比較器必須執行RawComparator
interface。
使用Hadoop 2.X,這是通過使用Job.setSortComparatorClass
完成的,仍然使用RawComparator
的實現。
@ Wookai - 如果我不打擾你很多,你能否在新的hadoop API中建議等效於setOutputKeyComparatorClass? – 2012-07-26 14:22:22
我更新了我的答案,以添加指向當前方法的鏈接。 – Wookai 2012-07-26 20:11:51
樣品,簡單的代碼
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然後在還原器中再次乘以-1得到5,4,3,2,1 。這會導致框架以sudo-descending排序。在更復雜的排序中,最好編寫一個用於比較的自定義類,然後將其設置在驅動程序類中。
將鍵設爲實現Comparable接口的類的對象,並根據自己的喜好重寫比較方法。 – Parzifal 2012-07-26 14:02:33