gpt4 book ai didi

java - MapReduce:Mapper和Reducer可以共享变量吗?

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

我正在使用JavaHadoop作为MapReduce

输入(txt文件):

doc1    apple pizza apple
doc2 pear apple
doc3 cookie noodle apple
doc4 pizza milk
.
.
.
Mapper读取上述文本文件的每一行并发出 (word, 1)。但是因为 Reducer应该知道每个单词在整个文档中出现了多少个。例如,在“苹果”的情况下,它出现在doc1,doc2,doc3处,因此 Reducer中需要“3”。

我在想的是这样的:
由于 Reducer在所有 Mapper的工作完成之后开始运行,因此 Mapper可以在每次发出 HashMap时计数增加 (word, 1)的值。例如,当 Mapper读取 doc1行时,它会使整个内容成为唯一的单词(=>苹果比萨饼)。并且每当它发出 (word, 1)时,比如说 (apple, 1),就执行 hashMap['apple'] ++

在完成所有 Mapper的工作之后, Reducer访问此 HashMap,以便它可以使用每个单词在整个文档中出现的次数。

我已经阅读了有关 How to share a variable in Mapper and Reducer class?的信息,但我想从你们那里获得建议。

p.s对不起,英语不好,但我不是母语。如果您听不懂我在说什么,请发表评论。

最佳答案

我不确定我确切了解您在这里做什么。

目的是什么?
如果要计算您的所有记录中每个单词有多少次,它将像这样工作:

映射器:

function map(){
String[] arr = line.split(" ");
foreach(String word : arr){
context.write(word,1)
}
}

映射完成后,所有键都将按键排序,并分组在一起。
这是非常重要的功能。

例:
 Mapper:
doc1 will produce:
apple 1
pizza 1
apple 1

映射器后,文档将按关键字分组:
苹果=> [1,1]
披萨=> [1]

reducer :
function reduce(apple, [1,1]){

count=0;
foreach(value in values) do:
count++
done

context.write(key,count) ; //Here you will have the number of apples
in all your docs
}

关于java - MapReduce:Mapper和Reducer可以共享变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42989561/

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