Java MapReduce:Mapper和Reducer可以共享变量吗?
我正在使用Java MapReduce:Mapper和Reducer可以共享变量吗?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在使用Java,Hadoop进行MapReduce 输入(txt文件): Mapper读取上述文本文件的每一行并发出(word,1)。但是由于Reducer应该知道每个单词在整个文档中出现的数量。例如,在“apple”的情况下,它出现在doc1、doc2、doc3,因此在Reducer中需要“3” 我想的是这样的: 由于Reducer在所有Mapper的工作完成后开始运行,Mapper可以在每次发出(word,1)时增加HashMap的值。例如,当Mapper读取doc1行时,它将整个内容作
Java
,Hadoop
进行MapReduce
输入(txt
文件):
Mapper
读取上述文本文件的每一行并发出(word,1)
。但是由于Reducer
应该知道每个单词在整个文档中出现的数量。例如,在“apple”的情况下,它出现在doc1、doc2、doc3,因此在Reducer
中需要“3”
我想的是这样的:
由于Reducer
在所有Mapper
的工作完成后开始运行,Mapper
可以在每次发出(word,1)
时增加HashMap
的值。例如,当Mapper
读取doc1
行时,它将整个内容作为唯一的单词(=>苹果比萨饼)。每次它发出(word,1)
,说(apple,1)
,做hashMap['apple']+
所有Mapper
的工作完成后,Reducer
访问此HashMap
,以便它可以使用每个单词在整个文档中出现的次数
我读过,但我想从你们那里得到建议
p、 很抱歉我英语不好,但我不是本地人。如果你不明白我在说什么,请发表评论。我不确定我是否完全明白你在这里做什么 这样做的目的是什么? 如果要计算每个单词在所有记录中出现的次数,它将如下所示: 制图员:
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]
减速器:
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
}
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
}