Word Count

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
 
//Map阶段:输入的行号作为key,每行读取的值作为value
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
 
	private Text k  = new Text();
	private IntWritable v = new IntWritable(1);
	
	@Override
	protected void map(LongWritable key, Text value,Context context) throws java.io.IOException, java.lang.InterruptedException {
	     
		// 1 将每次读入的一行进行分割
		String line = value.toString();
		
		// 2 转换成String类型进行分割
		String[] words = line.split(" ");
		
		// 3 将每个键值对都写出
		for (String word : words) {
			String trim = word.trim();
			if(!" ".equals(trim)){
				k.set(trim);
				// 4 map阶段将单词拆分,并不合并,所以固定值为1
				context.write(k, v);
			}
		}
	}
	
}
复制代码
import java.util.Iterator;
 
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
 
//Reduce阶段是以Map阶段的输出结果作为Reduce阶段的输入数据
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
 
	
	//同一个key有且仅只执行一次reduce方法
	@Override
	protected void reduce(Text text, Iterable<IntWritable> iterable, Context context) throws java.io.IOException, java.lang.InterruptedException {
	    
		// 1. 将map阶段同一个key对应的value值求和
		int sum = 0;
		Iterator<IntWritable> iterator = iterable.iterator();
		while(iterator.hasNext()){
			 sum += iterator.next().get();
		}
		if(!text.toString().trim().equals("")){
			//将结果输出
			context.write(text, new IntWritable(sum));
		}
	}
	
}
复制代码

转载于:https://juejin.im/post/5d077f4cf265da1bc7523a1c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值