gpt4 book ai didi

java - MapWritable 用新添加的键替换所有现有键 - Hadoop MapReduce 2.6.4

转载 作者:行者123 更新时间:2023-12-02 20:59:43 25 4
gpt4 key购买 nike

我正在使用 Hadoop 2.6.4,并且正在尝试为单词共现实现 Stripes 映射器。尝试使用 MapWritable 时遇到问题类(class)。当尝试将新的键/值添加到映射中时,添加的任何键都会用自身替换映射中的每个其他键。

例如,假设我有一个句子
“这是一个有两个字母的句子”

第一次运行时,我正在查看“This”这个词的共现。所以预期的映射器将是

<is,1>
<a,2>
<sentence,1>
<with,1>
<two,1>
<letters,1>

但实际发生的是在添加后续单词的每次迭代中,所有键/值都被替换为添加的最后一个键。我看到的实际结果如下。
<letters,1>
<letters,1>
<letters,1>
<letters,1>
<letters,1>
<letters,1>

我创建了一个方法来转换 HashMapMapWritable ,这就是问题发生的地方。这是我正在使用的代码。我添加了打印语句以确保我添加的值是正确的(它们是正确的),然后我打印键以查看添加它们时发生的情况。这是我能够看到它正在替换每个键的地方,因为它添加了一个新键。

根据我查看的所有文档,我正在使用 MapWritable.put()正确,它应该只是添加到 map 或更新值,就像使用通用 HashMap 一样.我不知道是什么原因造成的。
public static MapWritable toMapWritable(HashMap<String,Integer> map){

MapWritable mw = new MapWritable();
Text key = new Text();
IntWritable val = new IntWritable();

for(String it : map.keySet()){
key.set(it.toString());
System.out.println("Setting Key: " + key.toString());
val.set(map.get(it));
System.out.println("Setting Value: " + map.get(key.toString()));
mw.put(key,val);
for(Writable itw : mw.keySet()){
System.out.println("Actual mw Key " + itw.toString());
}
}

return mw;
}

最佳答案

您重复调用 key.set() 并且只分配了一个文本。这基本上就是你正在做的事情。

Text key = new Text();
key.set("key1");
key.set("key2");
System.out.println(key); // prints 'key2'

我相信您可能正在实现在 Map/Reduce 作业中重用对象的常见模式。然而,这取决于调用 context.write()。例如:
private Text word = new Text();
private IntWritable count = new IntWritable(1);

public void map(LongWritable offset, Text line, Context context) {
for (String s : line.toString().split(" ")) {
word.set(s);
context.write(word, count); // Text gets serialized here
}
}

在上面的示例中,Map/Reduce 框架会将文本序列化为字节并在后台保存它们。这就是为什么您可以自由地重用 Text 对象。然而,MapWritable 并没有做同样的事情。您每次都需要创建新 key 。
MapWritable mw = new MapWritable();
mw.put(new Text("key1"), new Text("value1"));
mw.put(new Text("key2"), new Text("value2"));

关于java - MapWritable 用新添加的键替换所有现有键 - Hadoop MapReduce 2.6.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553925/

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