我有一个自定义类型,其中包含Hadoop本机类型的字段(例如Text
和IntWritable
),需要在随机/排序阶段使用它作为键和排序。有类似的问题,如this one和this one,但它们是关于使用本机类型。如何使用自定义类型获得相同的结果,需要满足哪些要求?
实现这一结果有一些细微差别,有些是显而易见的,有些则不然。我将尝试在几个短点内解释它们:
compareTo()
方法。compare()
方法。在此之后,您有两种使用此比较器而不是默认比较器的方法:或者在Job的setSortComparatorClass方法的帮助下设置此类:
job.setSortComparatorClass(YourComparator.class)
或者在自定义类型的静态块中注册它:
static {
WritableComparator.define(CustomType.class, new YourComparator());
}
静态块注册原始比较器,以便每当MapReduce看到类时,它都知道使用原始比较器作为其默认比较器。Here是具有静态嵌套比较器的此类的示例。