gpt4 book ai didi

java - 奇怪的 HashMap 结果 - Java,Hadoop

转载 作者:可可西里 更新时间:2023-11-01 17:00:57 25 4
gpt4 key购买 nike

我已经编写了这个简单的代码,它等同于 Reducer 类中的默认运行方法,但是发生了一些非常奇怪的事情。

这是默认的运行方法:

public void More ...run(Context context) throws IOException, InterruptedException {
setup(context);
while (context.nextKey()) {
reduce(context.getCurrentKey(), context.getValues(), context);
}
cleanup(context);
}

输出:

New reducer: 0
Reducer: 0:9,2:5
end of this reducer

Reducer: 0:9,5:7
end of this reducer

...(很多键)

Reducer: 7:7,6:7
end of this reducer

Reducer: 7:7,7:6
end of this reducer

这是我重写的方法:

@Override
public void run(Context context) throws IOException, InterruptedException {
setup(context);

HashMap<Text,HashSet<Text>> map = new HashMap<Text,HashSet<Text>>();

while (context.nextKey()) {
//reduce(context.getCurrentKey(),context.getValues(),context);
Text key = context.getCurrentKey();
map.put(key, new HashSet<Text>());
for(Text v : context.getValues()){
map.get(key).add(v);
}
}

for(Text k : map.keySet()){
reduce(k,map.get(k),context);
}
cleanup(context);
}

输出:

New reducer: 0

Reducer: 7:7,7:6
end of this reducer

...(很多键)

Reducer: 7:7,7:6
end of this reducer

我的问题是,如果我首先将键和值复制到散列图中,则没有任何工作正常进行,最后在 reduce 调用中它一次又一次地传递相同的键(存储在散列图中的第一个):/谁能帮我?我怎样才能正确地完成这项工作?我需要这样做,因为我想在将 key 发送到 reducer 之前对其进行预处理。提前致谢!

最佳答案

Hadoop 重用 Writable 对象。因此,您需要先创建新的,然后再将它们放入您的 Collection 中。

更改代码以复制内容如下所示:

while (context.nextKey()) {
Text key = new Text(context.getCurrentKey());
map.put(key, new HashSet<Text>());
for(Text v : context.getValues()){
map.get(key).add(new Text(v));
}
}

关于java - 奇怪的 HashMap 结果 - Java,Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24181826/

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