在用 Java 编写的 Hadoop MapReduce 作业中,我发现在 REDUCE 阶段,除法不稳定。在特定的 1 / X 和 X 双:
double sum = 0;
while (values.hasNext())
{
sum += values.next().get();
}
if (sum != 0) {
output.collect(key, new DoubleWritable(1/sum));
} else {
output.collect(key, new DoubleWritable(1));
}
values 是一个迭代器。
当 sum 与 ZERO 不同时,有时会写 1/sum,有时会写 sum。它让我发疯。非常感谢
[已解决] 我还有一个问题,MAPPER和REDUCER的接口(key-value)不同。(Text, InteWritable) 第一个 (Text, DoubleWritable) 第二个。我在“主要”中配置了这些东西。错误仍在继续,因为我输入此行是错误的:
conf.setCombinerClass(Reduce.class);
这需要映射器和reducer中的相同接口(k,v),这不是我的情况;删除一切正常。感谢 Arnon Rotem-Gal-Oz,我没有声望支持他