我只是困惑,像IntWritable,FloatWritable,GenericWritable等所有內置的可寫入使用原始比較默認情況下比較?如果不是,我們應該如何註冊他們使用rawcomparator。所有內置可寫入使用默認原始比較器嗎?
0
A
回答
2
如何獲得RawComparator
是JobConf.getOutputKeyComparator:
public RawComparator getOutputKeyComparator() {
Class<? extends RawComparator> theClass = getClass("mapred.output.key.comparator.class",
null, RawComparator.class);
if (theClass != null)
return ReflectionUtils.newInstance(theClass, this);
return WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class));
}
的Hadoop將嘗試從mapred.output.key.comparator.class
獲得RawComparator
類名。如果沒有設置,hadoop會嘗試將密鑰類別轉換爲WritableComparable
,並使用它創建WritableComparator
。所以如果我們不設置我們的客戶RawComparator
,我們輸入WritableComparator.get。
public static synchronized
WritableComparator get(Class<? extends WritableComparable> c) {
WritableComparator comparator = comparators.get(c);
if (comparator == null) {
// force the static initializers to run
forceInit(c);
// look to see if it is defined now
comparator = comparators.get(c);
// if not, use the generic one
if (comparator == null) {
comparator = new WritableComparator(c, true);
}
}
return comparator;
}
在WritableComparator.get
,它將會在地圖comparators
搜索WritableComparator
在第一。
大部分建於Writable
S,如IntWritable,在加載時,他們將調用define
把他們WritableComparator
(例如,org.apache.hadoop.io.IntWritable.Comparator
)至comparators
。所以,如果你想註冊您的自定義RawComparator
,您可以像使用的代碼(你需要確保這些代碼在你Writable
類主體):
static { // register this comparator
WritableComparator.define(IntWritable.class, new Comparator());
}
接下來,如果WritableComparable
不註冊WritableComparator
會發生什麼?這是WritableComparator的默認行爲。它會調用WritableComparable.compareTo
來比較兩個密鑰。
相關問題
- 1. 可以在C++中比較原始內存嗎?
- 2. TensorFlow默認使用機器中所有可用的GPU嗎?
- 3. LevelDB的默認比較器
- 4. C++/STL默認比較器
- 5. Hadoop原始比較器
- 6. 我可以使用比較器而不實現可比較嗎?
- 7. 我可以使用T4將原始字節寫入輸出嗎?
- 8. Matplotlib設置比較默認欄
- 9. 我可以重寫QListWidgetItem的__lt__比較器的輸入嗎? (PyQt)
- 10. 的Python:默認比較
- 11. VisualStudio默認比較選項
- 12. 比較反對默認值
- 13. 原始包裝比較
- 14. 比較原始類型
- 15. 在原始類型上使用可比較的
- 16. 如何在內存中打印所有QImage的原始數據進行比較?
- 17. 數組默認沒有原型嗎?
- 18. 在Twig中設置默認原始過濾器
- 19. 您可以配置WCF使用的XmlWriter的默認設置嗎?
- 20. 添加默認過濾器顯然「禁用」過濾器原始
- 21. 在Apache Cassandra中,是否可以使用CQL 3.0設置比較器和默認驗證器?
- 22. 使用XDocument寫入原始XML
- 23. 我可以使用generics.defaults比較Real48嗎?
- 24. 用drupal_get_css打印默認CSS文件的原始內容
- 25. 使用Mercurial時,在Eclipse中作爲默認比較工具的比較之外?
- 26. 將所有內容設置爲默認值的CSS重置
- 27. 將原始數據寫入驅動器或寫入文件會更快嗎?
- 28. 我可以調用binarySearch方法而不實現比較器/可比較嗎?
- 29. 比較內使用加入,其中
- 30. 數組排序比較方法總是進行默認比較