MR | 案例二:统计单词在不同文件中的出现次数

案例要求

统计输入路径内每个单词在不同文件中的出现次数。

输入文件示例

在这里插入图片描述

// a.txt
atguigu	pingping
atguigu	ss
atguigu	ss

// b.txt
atguigu	pingping
atguigu	pingping
atguigu	ss

// c.txt
atguigu	ss
atguigu	pingping

输出结果示例

// part-r-00000
atguigu		c.txt: 2, b.txt: 3, a.txt: 3
pingping	c.txt: 1, b.txt: 2, a.txt: 1
ss			c.txt: 1, b.txt: 1, a.txt: 2

解答思路

对于本案例,将其分为两步比较合适。
首先,将单词和所在文件所为key,统计出不同单词和不同文件的出现次数。
输出示例:

atguigu--a.txt	3
atguigu--b.txt	3
atguigu--c.txt	2
pingping--a.txt	1
pingping--b.txt	2
pingping--c.txt	1
ss--a.txt	2
ss--b.txt	1
ss--c.txt	1

其次,再将单词作为key,剩下的合并为value,就可以完成案例要求。本案例涉及到多个job串联,需要在驱动类中加入JobControl进行控制,并且需要设置 job之间的依赖关系

代码实现

第一步

WordCountAtFileMapper.java
package com.tony.mr.word_count_plus;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;

/**
 * @author tony
 * @create 2020-07-27 11:50
 */
public class WordCountAtFileMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
   

    private Text wordAndFile = new Text();
    private IntWritable One = new IntWritable(1);
    private String fileName;

    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
   
        InputSplit inputSplit = context.getInputSplit();
        FileSplit fileSplit = (FileSplit) inputSplit;
        fileName = fileSplit.getPath().getName();
    }

    @Override
    protected void map(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值