以下是hadoop字数javaMap和精简源代码:
在map函数中,我可以输出以字母“c”开头的所有单词,以及该单词出现的总次数,但我要做的只是输出以字母“c”开头的单词总数,但我在获取总数方面有点困难。如果您能提供任何帮助,我将不胜感激,谢谢您。
例子
我得到的结果:
可能2
罐头3
第5类
我想要的是:
c-总计10
public static class MapClass extends MapReduceBase
implements Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
String line = value.toString();
StringTokenizer itr = new StringTokenizer(line);
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
if(word.toString().startsWith("c"){
output.collect(word, one);
}
}
}
}
public static class Reduce extends MapReduceBase
implements Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output,
Reporter reporter) throws IOException {
int sum = 0;
while (values.hasNext()) {
sum += values.next().get(); //gets the sum of the words and add them together
}
output.collect(key, new IntWritable(sum)); //outputs the word and the number
}
}
3条答案
按热度按时间toiithl61#
而不是
在Map器中,尝试:
gajydyqb2#
Map器的更简单代码:
jmp7cifd3#
克里斯·格肯的回答是对的。
如果您将单词作为关键字输出,它只会帮助您计算以“c”开头的唯一单词的计数
不是所有的“c”总数。
因此,您需要从mapper输出一个唯一的键。
下面是一个使用新api的示例
驾驶员等级
Map类
减速器等级