代码如下:

package cn.toto.bigdata.mr.index;import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class IndexCreateStepOne {public static class IndexCreateMapper extends Mapper<LongWritable, Text, Text, IntWritable> {Text k = new Text();IntWritable v = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();String[] words = line.split(" ");FileSplit inputSplit = (FileSplit) context.getInputSplit();//获取到word(单词)所在的文件的名称String fileName = inputSplit.getPath().getName();//最终输出的格式效果如:       key:单词---文件名   value:1for(String word : words) {k.set(word + "--" + fileName);context.write(k, v);}}    }public static class IndexCreateReducer extends Reducer<Text, IntWritable, Text, IntWritable> {IntWritable v = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable value : values) {count += value.get();}v.set(count);context.write(key, v);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);//告诉框架,我们的程序所在jar包的路径// job.setJar("c:/wordcount.jar");job.setJarByClass(IndexCreateStepOne.class);//告诉框架,我们的程序所用的mapper类和reducer类job.setMapperClass(IndexCreateMapper.class);job.setReducerClass(IndexCreateReducer.class);job.setCombinerClass(IndexCreateReducer.class);//告诉框架,我们的mapperreducer输出的数据类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.setInputPaths(job, new Path("E:/wordcount/inverindexinput/"));//告诉框架,我们的处理结果要输出到哪里FileOutputFormat.setOutputPath(job, new Path("E:/wordcount/index-1/"));boolean res = job.waitForCompletion(true);System.exit(res ? 0 : 1);}
}

准备条件

1、要处理的数据文件

b.txt的内容如下:

其它的c.txt,d.txt和上面的类似

运行后的结果如下:

这样,可以列出各各单词在每个文件中的数量了

接着,做如下的功能:单词作为key,在文件和文件中的个数的数值作为value,然后去做统计,实例代码如下:

package cn.toto.bigdata.mr.index;import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.mockito.internal.stubbing.StubbedInvocationMatcher;import io.netty.handler.codec.http.HttpHeaders.Values;public class IndexCreateStepTwo {public static class IndexCreateStepTwoMapper extends Mapper<LongWritable, Text, Text, Text> {Text k = new Text();Text v = new Text();@Overrideprotected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context)throws IOException, InterruptedException {String line = value.toString();String[] fields = line.split("\t");String word_file = fields[0];String count = fields[1];String[] split = word_file.split("--");String word = split[0];String file = split[1];k.set(word);v.set(file + "--" + count);context.write(k, v);}}public static class IndexCreateStepTwoReducer extends Reducer<Text, Text, Text, Text> {Text v = new Text();@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException {StringBuffer sb = new StringBuffer();for (Text value : values) {sb.append(value.toString()).append(" ");}v.set(sb.toString());context.write(key, v);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);//告诉框架,我们的程序所在jar包的路径// job.setJar("c:/wordcount.jar");job.setJarByClass(IndexCreateStepTwo.class);//告诉框架,我们的程序所用的mapper类和reducer类job.setMapperClass(IndexCreateStepTwoMapper.class);job.setReducerClass(IndexCreateStepTwoReducer.class);job.setCombinerClass(IndexCreateStepTwoReducer.class);//告诉框架,我们的mapperreducer输出的数据类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.setInputPaths(job, new Path("E:/wordcount/index-1/"));//告诉框架,我们的处理结果要输出到哪里去FileOutputFormat.setOutputPath(job, new Path("E:/wordcount/index-2/"));boolean res = job.waitForCompletion(true);System.exit(res ? 0 : 1);}
}

程序运行的结果如下:

通过MapReduce统计每个单子在每个文件中出现的次数(FileSplit的使用),单词作为key,所在文本和次数作为value进行统计相关推荐

  1. Java统计1到300_java程序员的从0到1:统计某字符串在某文件中出现的次数(面试题)...

    目录: 1. 编程题目 2. 方法一 3. 方法二 4. 方法三 5. 方法四 6. 总结 正文: 1. 编程题目 写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数. 2. ...

  2. 请将第4章例4-6中的问卷调查结果用文本文件result保存, 并编写程序读该文件然后统计各评语出现的次数,再将最终统计结果追加至esultxt文件中

    1.请将第4章例4-6中的问卷调查结果用文本文件"result"保存, 并编写程序读该文件然后统计各评语出现的次数,再将最终统计结果追加至"esultxt"文件 ...

  3. 第四周作业——统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)

    统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现) 方法一:grep实现 grep -o "\<[[:alpha:]] ...

  4. ML之MLiR:利用多元线性回归法,从大量数据(csv文件)中提取五个因变量(输入运输任务总里程数、运输次数、三种不同的车型,预测需要花费的小时数)来预测一个自变量

    ML之MLiR:利用多元线性回归法,从大量数据(csv文件)中提取五个因变量(输入运输任务总里程数.运输次数.三种不同的车型,预测需要花费的小时数)来预测一个自变量 输出结果 代码设计 from nu ...

  5. 超大文件中在有限的内存里找到单词频率 top 100

    问题 问题:有一个 1G 大小的文件,里面每一行是一个词,每个词的大小不超过 16 字节,内存限制大小是 1M.返回出现频率最高的 100 个单词 解法一: 第一步:将 1 G 拆分成小文件,每个小文 ...

  6. 使用Python对PDF文件进行词频统计分析并保存到CSV文件中

    PDF转TXT文件要安装的库 pdfminer3k 分词处理要安装的库 jieba # -*- coding:utf-8 import sys import importlib importlib.r ...

  7. 统计Steve Jobs在斯坦福大学的毕业典礼演讲稿中出现频率最高的前20个单词

    [问题描述]苹果公司和Pixar动画工作室的CEO Steve Jobs在斯坦福大学的毕业典礼演讲稿保存在文件"Steve Jobs.txt",针对该文件,编写程序统计文件中出现频 ...

  8. C# 读取根目录的json文件中的某个值

    /// <summary>/// 读取JSON文件/// </summary>/// <param name="key">JSON文件中的key ...

  9. c 包含其他文件_C语言:全局变量在多个c文件中公用的方法!

    用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用. 举例说明:项目文件夹project下有main. ...

最新文章

  1. 两次关于软考网络工程师的经历
  2. linux history 命令 shell历史记录显示 HISTSIZE
  3. SSL 数字证书助力电子商务,让您网络购物更安心
  4. 关于使用data()获取自定义属性出现undefined的说明
  5. 改变跳转页面 英文_如何高效阅读英文文献?你可以试试它 | 知云文献翻译
  6. IIS中的 Asp.Net Core 和 dotnet watch
  7. 飞秋的不定长度字符串处理方法
  8. Think in Java第四版 读书笔记7第13章 字符串
  9. Layui的一点小理解(上)
  10. crontab mysql 不执行_crontab定时任务不执行
  11. 几种常见机器学习距离公式
  12. 也谈POV旋转LED制作,经验及技术点。
  13. java并发圣经,差距不止一星半点!Github星标85K的性能优化法则圣经
  14. Dreamweaver入门基础与HTML视频教程
  15. Gdevops广州站:主流数据库的选型、架构设计与迁移实战,一网打尽!
  16. leetcode 5230 Check If It Is a Straight Line
  17. 有特点的3D网络拓扑图
  18. 微博蓝V认证怎么做?(微博企业认证)
  19. 用于实时大数据处理的Lambda架构
  20. main线程 子线程 顺序_在主线程main中开启子线程thread示例

热门文章

  1. 《机器学习实战》第十五章 MapReduce
  2. weblogic10数据源(连接池)配置
  3. python with方法
  4. 用图讲解狄克斯特拉(DiskStra)算法,python实现 。
  5. opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影
  6. Linux 初步笔记
  7. VTK:插值相机用法实战
  8. VTK:创建一个圆锥用法实战
  9. OpenCASCADE:常用Inspector控件之树视图
  10. OpenCASCADE绘制测试线束:检查器命令之Inspector