Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hadoop字数,在映射中求和_Java_Hadoop_Mapreduce - Fatal编程技术网

Java Hadoop字数,在映射中求和

Java Hadoop字数,在映射中求和,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我被要求修改WordCount示例,以便每个映射器函数在传递之前将文件中出现的单词相加。因此,例如,不是: <help,1> <you,1> <help,1> <me,1> 您可以定义Java映射结构或番石榴,并计算每个映射器中每个单词的出现次数。然后,当映射器结束时,随后运行的cleanup方法可以将所有部分和作为map的输出,如下所示(伪代码): setup(){ 映射计数=新的HashMap(); } 地图(){ 每个单词w{ counts

我被要求修改WordCount示例,以便每个映射器函数在传递之前将文件中出现的单词相加。因此,例如,不是:

<help,1>
<you,1>
<help,1>
<me,1>

您可以定义Java映射结构或番石榴,并计算每个映射器中每个单词的出现次数。然后,当映射器结束时,随后运行的cleanup方法可以将所有部分和作为map的输出,如下所示(伪代码):

setup(){
映射计数=新的HashMap();
}
地图(){
每个单词w{
counts.put(w,counts.get(w)+1);//或1,如果counts.get(w)返回null
}
}
清理(){
对于每个键w counts.keySet{
write(w,counts.get(w));
}
}
引用(版本2.6.2):

Hadoop Map Reduce框架为作业的InputFormat生成的每个InputSplit生成一个映射任务。映射器实现可以通过JobContext.getConfiguration()访问作业的配置

框架首先调用setup(org.apache.hadoop.mapreduce.Mapper.Context),然后为InputSplit中的每个键/值对调用map(对象、对象、上下文)。最后调用cleanup(上下文)


<>除此之外,你还可以考虑使用组合器作为替代。

我对你的答案感兴趣。我能知道这个多重地图存储在哪里吗?我是说这个映射函数在多台pc上运行,对吗?@AchmadJP我实际上是指多集。就在你发表评论之前,我更新了我的答案。不要将数据结构(如Multiset、Multimap或java Map)与MapReduce的Map()方法混淆。他们完全不同。请阅读我在回答中作为链接提供的Multiset文档。我希望有帮助。因此,如果您不感到困惑的话,这些数据结构只存储在每个映射器的内存中,然后删除;它们在任何时候都不会写入磁盘。你的解释很好。如果你选择了答案,请考虑把你的评论插入你的答案中。
<help,2>
<you,1>
<me,1>
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
    word.set(tokenizer.nextToken());
    context.write(word, one);
}
setup() {
    Map<String,Integer> counts = new HashMap<>(); 
}

map() {
    for each word w {
        counts.put(w, counts.get(w)+1); //or 1, if counts.get(w) returns null
    }
}

cleanup() {
    for each key w of counts.keySet {
        context.write(w, counts.get(w));
    }
}