代码如下:

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. 通过MapReduce统计每个单子在每个文件中出现的次数(FileSplit的使用),单词作为key,所在文本和次数作为value进行统计

    代码如下: package cn.toto.bigdata.mr.index;import java.io.IOException;import org.apache.hadoop.conf.Conf ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 【Python】青少年蓝桥杯_每日一题_1.27_单词出现的次数
  2. 基于互联网大数据的管理创新
  3. saxbuilder用法(转)
  4. Kali利用msf对MS10_061漏洞进行渗透测试
  5. python 分类变量xgboost_【转】XGBoost参数调优完全指南(附Python代码)
  6. 多角度分析,通讯时序数据的预测与异常检测挑战
  7. 想成为前端工程师,那么在大学期间应该如何规划?
  8. Android:Toolbar的图标尺寸问题
  9. C++ 哪些不能为虚函数
  10. js中文乱码解决方法
  11. 大数据平台基础架构hadoop安全分析
  12. light动名词_英语语法大全之动名词
  13. Oracle 各备份恢复环境下 SCN
  14. 华为机试—字符串处理专题
  15. CF 597A Divisibility
  16. vivo X21使用AS“解析包错误”问题解决
  17. 认识计算机硬件.ppt,认识计算机硬件资料课件.ppt
  18. 各端口抓肉鸡的几种方法
  19. ntlm java_Java Web服务NTLM身份验证
  20. IronMCC 多媒体展厅中控系统

热门文章

  1. Redis雪崩效应以及解决方案
  2. 时间序列模型c语言,时间序列分析步骤及sas代码
  3. unity 走马灯packageManager
  4. HCIE大师之路(二)——IPSec Over GRE综合实验
  5. 怎么查看html隐藏代码,隐藏HTML源代码 怎样查看网页中隐藏的html源码
  6. 计算机电池电源转换,整套解决方案:笔记本电脑的外部电源和电池如何实现无缝切换?...
  7. 把rmvb格式转化为avi格式
  8. 网站服务器 发包,如何实现CentOS不停向外发包_网站服务器运行维护,CentOS
  9. asp 文件上传(ASPUpload组件上传)
  10. Android 程序随开机自动运行