hadoop的默认分组比较器?

368yc8dk  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(274)

我在努力理解违约 grouping comparator 在hadoop的mr。
当我们在驱动程序代码中没有指定任何关于分组的内容时 comparator ,是否使用 compareTo() 键的方法(例如假设hadoop的内置数据类型, IntWritable ).
在我们有自定义密钥的情况下,它是否仍然依赖于密钥的 compareTo() 方法?
我确实在网上搜索过,但没有得到满意的答案来澄清我的疑虑。谁能帮我澄清一下吗。

编辑

这个问题不是重复的,因为已经标记;我的问题不是询问分组比较器的角色,而是询问默认实现是什么,以及我们有自定义密钥的情况。我不知道这个问题是在什么基础上被标记为另一个so问题的重复,这个问题涉及到提出“分组比较”的需要。我提到了那个问题,那和这个问题毫无关系。

o4hqfura

o4hqfura1#

回答你的问题
... 它用什么 compareTo() 键的方法。。。。
是的,但是 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;
     }
   }

在我们有自定义密钥的情况下,它是否仍然依赖于密钥的 compare() 方法?
是的,如果您想优化,有一个默认的实现。
样品 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
    }

}

从文档来看,这是一个优化钩子。这意味着,这个方法在默认情况下是实现的,但应该用于优化或自定义代码。

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

相关问题