java - Hadoop的默认分组比较器?

标签 java hadoop mapreduce hadoop-yarn hadoop2

我试图了解默认 grouping comparator在 Hadoop 的 MR 中工作。

当我们没有在驱动程序代码中指定任何关于分组的内容时 comparator , 是否使用 compareTo()键的方法(假设 Hadoop 的内置数据类型,例如 IntWritable )。

我们有自定义 key 的情况怎么样,它仍然取决于 key 的compareTo()吗?方法?

我确实在网上搜索过,但我没有得到满意的答案来解决我的疑问。任何人都可以帮助澄清这一点。

编辑

此问题与已标记的不重复;我的问题不是询问分组比较器的角色,而是询问默认实现是什么以及我们有自定义键的情况。我不确定这个问题在什么基础上被标记为另一个 SO 问题的重复,这与询问“分组比较器”的需要有关。我提到了那个问题,这与这个问题没有任何关系。

最佳答案

回答您的疑问

... does it use compareTo() method of the key ....



是的,但它的 compare()来自以下实现的方法
public static class Comparator extends WritableComparator
   {
     public Comparator() {
       super();
     }


     public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2)
     {
       int thisValue = readInt(b1, s1);
       int thatValue = readInt(b2, s2);
       return thisValue == thatValue ? 0 : thisValue < thatValue ? -1 : 1;
     }
   }

How about the situations in which we have custom key, does it still depend on key's compare() method?



是的,如果您想优化,可以使用默认实现。

sample writable类型可能看起来像
public class MyWritable extends WritableComparator {

    public MyWritable() {
        super();
    }

    @Override
    public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
        // Custom code
    }


}

来自 doc ,这是一个优化钩子(Hook)。这意味着,此方法默认实现,但它应该用于优化或自定义代码。

enter image description here

请注意还有一个 compare(WritableComparable a, WritableComparable b) , 如果您使用 WritableComparator(Class<? extends WritableComparable> keyClass)用于实现。

关于java - Hadoop的默认分组比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274570/

相关文章:

java - 我们如何使用 Linear 布局来代替 ListView

java - 使用 MouseAdapter 移动光标时获取光标位置

java - Hadoop : Reducer class not called even with Overrides

java - 用java计算利率

Java 变色图形与定时器

Hadoop namenode需要在每台电脑启动后格式化

json - 在为下游应用程序写入HDFS时,JSON与CSV文件格式的Mertis

regex - hive 中的access_log进程

hadoop - 如何检索失败的hadoop reduce任务,使用成功的 map 计算

java - 在HDFS上存储WEKA jar文件并从mapreduce调用WEKA方法