WordCountMapper

package cn.itcast.mapreduce;


import java.io.IOException;


import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
/**
 * 
 * @author AllenWoon
 *
 * Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
 * KEYIN:是指框架读取到的数据的key类型
 * 在默认的读取数据组件InputFormat下,读取的key是一行文本的偏移量,所以key的类型是long类型的
 * 
 * VALUEIN指框架读取到的数据的value类型
 * 在默认的读取数据组件InputFormat下,读到的value就是一行文本的内容,所以value的类型是String类型的
 * 
 * keyout是指用户自定义逻辑方法返回的数据中key的类型 这个是由用户业务逻辑决定的。
 * 在我们的单词统计当中,我们输出的是单词作为key,所以类型是String
 * 
 * VALUEOUT是指用户自定义逻辑方法返回的数据中value的类型 这个是由用户业务逻辑决定的。
 * 在我们的单词统计当中,我们输出的是单词数量作为value,所以类型是Integer
 * 
 * 但是,String ,Long都是jdk中自带的数据类型,在序列化的时候,效率比较低。hadoop为了提高序列化的效率,他就自己自定义了一套数据结构。
 * 
 * 所以说在我们的hadoop程序中,如果该数据需要进行序列化(写磁盘,或者网络传输),就一定要用实现了hadoop序列化框架的数据类型
 * 
 * 
 * Long------->LongWritable
 * String----->Text
 * Integer---->IntWritable
 * null------->nullWritable
 * 
 */




public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

/**
* 这个map方法就是mapreduce程序中被主体程序MapTask所调用的用户业务逻辑方法

* Maptask会驱动我们的读取数据组件InputFormat去读取数据(KEYIN,VALUEIN),每读取一个(k,v),他就会传入到这个用户写的map方法中去调用一次

* 在默认的inputFormat实现中,此处的key就是一行的起始偏移量,value就是一行的内容
*/
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
  
//获取每一行的文本内容
String lines = value.toString();
String[] words = lines.split(" ");

for (String word :words) {
context.write(new Text(word), new IntWritable(1));
}

}


}













  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值