gpt4 book ai didi

java - 清理未在 reducer 中运行

转载 作者:可可西里 更新时间:2023-11-01 16:13:05 26 4
gpt4 key购买 nike

我一直在 Cloudera VM 4.7 中使用 Hadoop 2.0。我正在尝试打印 cleanup 方法中出现次数最多的 5 个单词,其中 documentation描述了如何使用。但它根本不会被调用。

public static class Reduce extends MapReduceBase implements
Reducer<Text, IntWritable, Text, IntWritable> {

private java.util.Map<String, Integer> top5 = new HashMap<String, Integer>(5);

public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get();
}
reporter.getCounter(statistics.UNIQUE_TERMS).increment(1);
if (sum < 5) {
reporter.getCounter(statistics.LT5_TERM).increment(1);
}

if (this.top5.size() < 5) {
top5.put(key.toString(), sum);
} else {
for (Entry<String, Integer> e : this.top5.entrySet()) {
if (sum > e.getValue()) {
this.top5.remove(e.getKey());
this.top5.put(key.toString(), sum);
break;
}
}
}

output.collect(key, new IntWritable(sum));
}

protected void cleanup(org.apache.hadoop.mapreduce.Reducer.Context context) throws IOException, InterruptedException {
System.out.println(this.top5);
}
}

如何让方法按预期运行?

编辑:这个问题也适用于 setup 方法和映射器。

最佳答案

您需要将 @Override 注释添加到您的 cleanup 方法。

此外,如果您使用的是旧 API,则必须检查 Mapper 接口(interface)是否扩展了 Closable 接口(interface) - 它定义了 close 方法(而不是 cleanup,后者是新 mapreduce API 映射器的方法)

@Override
public void close() {

}

关于java - 清理未在 reducer 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269939/

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