gpt4 book ai didi

java - Hadoop结果困惑

转载 作者:行者123 更新时间:2023-12-02 21:48:26 27 4
gpt4 key购买 nike

我发现这种差异让我感到困惑

最初,我想通过在每个步骤中累加1来计算化简器中的记录数,代码如下:

输入对是<Text, DoubleWritable>,所有记录具有相同的键“一个”。有160000条记录

public void reduce(Text key, Iterator<DoubleWritable> values, OutputCollector<Text, DoubleWritable> output, Reporter reporter) throws IOException {
double count = 0;
while(values.hasNext()){
count = count + 1;
}
output.collect(new Text("Count"), new DoubleWritable(count));
}

输出为22

在将reducer的输入更改为
<Text, Text>,所有记录“1”的键值均相同,且值为“1”

代码变为:
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, DoubleWritable> output, Reporter reporter) throws IOException {
double count = 0;
String s = "";
while(values.hasNext()){
s = values.next().toString();
count = count + Integer.parseInt(s);
}

output.collect(new Text("Count"), new DoubleWritable(count));
}

现在答案是正确的:160000

在每种情况下,while循环的迭代次数似乎应该相同。为什么结果不同?

最佳答案

这里的问题是,两个示例的逻辑实际上是不同的。在第一种情况下,您只计算传递给化简器的键/值对的数量。

为了在逻辑上等效,您需要将count = count + 1更改为count = count + iter.next().get()以获得值的总和。

这是因为您的 reducer 也是组合器。因此,当键/值对到达化简器时,它们已被部分求和(合并)。

Count 1700
Count 42
Count 5640
...

关于java - Hadoop结果困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com