gpt4 book ai didi

java - 在mapreduce中访问mapper/reducer类之外的静态HashMap

转载 作者:行者123 更新时间:2023-12-01 18:38:20 26 4
gpt4 key购买 nike

我正在尝试编写一个mapreduce程序,其中map函数将项目添加到HashMap,然后reducer访问这些项目并将其写入输出。

public class MyClass {
static HashMap<String, Integer> temp = new HashMap<String, Integer>();

public static class Map1 extends Mapper<LongWritable, Text, Text, IntWritable> {
public void map(LongWritable key, Text value, Context context) {
temp.put("1", 1);
}
}

public static class Reduce1 extends Reducer<Text, IntWritable, Text, Text> {

@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) {
Iterator it = temp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> pair = (Map.Entry<String, Integer>)it.next();
String key = pair.getKey();
String val = Integer.toString(pair.getValue());
context.write(new Text(key), new Text(val));
}
}
}

这编译得很好,但是 reducer 的输出是空的。我不太擅长 Java,所以我不太确定这里出了什么问题。

最佳答案

您误解了 MapReduce 是一种在许多进程和潜在机器之间运行的分布式算法。

在此过程中创建的每个新 MyClass 实例都将为空,并且不会作为应用程序生命周期的一部分进行共享

另外,你的映射器什么也没做。向reducer发送数据的方式是使用context.write

有关字数统计代码,请参阅 Hadoop 官方文档。

关于java - 在mapreduce中访问mapper/reducer类之外的静态HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59996545/

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