MapReduce实现词频统计

 

 

自定义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));
        }

    }
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值