03MR实现wordcount

KEYIN: 是maptask读取到数据的key类型,是一行的起始偏移量Long。
VALUEIN: 是maptask读取到数据的value类型,是一行的内容String。

KEYOUT: 是用户自定义map方法要返回结果kv数据的key类型,在wordcount逻辑中,我们需要返回的是单词String。
VALUEOUT: 是用户自定义map方法要返回结果kv数据的value类型,在wc逻辑中,我们需要返回的是整数Integer。

但是,在mapreduce中,map产生的数据需要传输给reduce,需要进行序列化和反序列化,而jdk中的
原生序列化机制产生的数据量比较冗余,就会导致数据在mapreduce运行过程传输效率地下,所以,
hadoop专门设计了自己的序列化机制,那么,mapreduce中传输的数据类型就必须实现hadoop自己的序列化接口。

Hadoop为jdk中的基本类型Long String Integer Float等数据类型封装了自己的实现了Hadoop序列化
接口的类型:LongWritable Text IntWritable FloatWritable。
主类,处理一行数据。
public class WcMapper extends Mapper<LongWritable, Text, Text, IntWritable> {	
	//将里面原先的一行逻辑删除,自己写。
	@Override
	protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
			throws IOException, InterruptedException {
		//切单词
		String line = value.toString();
		String[] words = line.split(" ");
		for(String word : words){
			context.write(new Text(word), new IntWritable(1));
		}
	}
}
另外写一个类,处理一组相同key的数据。
public class wcReduce extends Reducer<Text, IntWritable, Text, IntWritable>{
@Override
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws InterruptedException, IOException {
	
	int count = 0;
	Iterable<IntWritable> interator = values.iterator();
	while(iterator.hasNext()){
		IntWritable value = iterator.next();
		count += value.get();
	}
	context.write(key, new IntWritable(count));
	
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hao难懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值