我试图了解默认 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)。这意味着,此方法默认实现,但它应该用于优化或自定义代码。
请注意还有一个
compare(WritableComparable a, WritableComparable b)
, 如果您使用 WritableComparator(Class<? extends WritableComparable> keyClass)
用于实现。
关于java - Hadoop的默认分组比较器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49274570/