自定义Mapper实现
Hadoop分布式节点之间会进行网络通信,所以数据势必要涉及到序列化和反序列化
因此Hadoop的自定义的一些数据类型和Java常规类型支持序列化的功能更好
所以 Long, String, String, IntWritable 换成了 LongWritale, Text, Text, IntWritable
map做的事情就是拆分,拆分之后,每个单词给它附上一个1,然后输出,后面的事情交给reduce来处理
WordCountMapper.java
package com.imooc.bigdata.hadoop.mr.wc; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; /** * KEYIN: Map任务读数据的key类型,offset,是每行数据起始位置的偏移量,是Long类型 * VALUEIN: Map任务读数据的value值,其实就是一行行的字符串,String类型 * * hello world welcome * hello welcome * * KEYOUT: map方法自定义实现输出的key类型, String类型 * VALUEOUT: map方法自定义实现输出的value类型, Int类型 * * 词频统计: 相同单词的次数 (word, 1) * */ public class WordCountMapper extends Mapper<LongWritable,Text, Text, IntWritable> { @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //把value对应的行数据按照指定的分隔符拆开 String[] words = value.toString().split("\t"); for(String word:words){ //(hello,1) (world,1) context.write(new Text(word), new IntWritable(1)); } } }
MapReduce实现词频统计
最新推荐文章于 2023-06-22 19:30:20 发布