@WordCount词频统计详解(乱序版)

WordCount主要分三部分:
WordCountMain、WordCountMapper、WordcountReducer

WordCountMain: 用来统筹map逻辑以及reducer逻辑

WordCountMapper:
切分,编写map逻辑使得<k1,v1>转换成<k2,v2>

WordcountReducer:

编写reducer逻辑使得<k2,v2>转换成<k3,v3>

WordCountMain

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;//将map与reducer组织在一起
public class WordCountMain extends Configured implements Tool { //alt+enter实现方法@Overridepublic int run(String[] strings) throws Exception {
    //方法名:getInstance,需要参数,接收并获取返回值类型(Ctrl+Alt+V)//   Job.getInstance(super.getConf(),"wc"); 获取返回值类型后如下Job job = Job.getInstance(super.getConf(), "wc");//  获取的job用来组织起来MapReduce// 1、读取文件解析成key value对   TextInputFormat//通过job使用setInputFormatClass使得job与TextInputformat相关联 从而进行输入job.setInputFormatClass(TextInputFormat.class);//给TextInputFormat设置文件读取路径    Path路径TextInputFormat.addInputPath(job, new Path(""));//2、map逻辑//通过job将Mapper引进来job.setMapperClass(WordCountMapper.class);//设置map的输出 输出k2 v2job.setMapOutputKeyClass(Text.class);//k2job.setMapOutputValueClass(IntWritable.class);//v2//3~6 分区   排序    规约    分组//7、ruducer逻辑//同样通过job引进Reducerjob.setReducerClass(WordCountReducer.class);//设置reduce输出job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//8、输出//通过job使用setOutputFormatClass使得job与TextOutputFormat相关联从而进行输出job.setOutputFormatClass(TextOutputFormat.class);TextOutputFormat.setOutputPath(job, new Path(""));boolean b = job.waitForCompletion(true);return b?0:1;
}
public static void main(String[] args) throws Exception {Configuration conf = new Configuration();//   ToolRunner.run(conf,new WordCountMain(),args); //alt + enter 抛出异常
//    run方法有conf、tool、args三个参数,然后方法需要返回值
//    返回值快捷键 Ctrl + Alt +V 变形成如下int run = ToolRunner.run(conf, new WordCountMain(), args);//alt + enter 抛出异常
// 对run方法获取返回值后,根据获取的返回值正常退出run方法System.exit(run);
}

}

WordCountMapper

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;//k1 行偏移量(阿拉伯数字)     LongWritable                v1 行文本内容    Text
//k2一个个单词             Text                            v2 数字1     IntWritable
//public class WordCountMapper extends Mapper<k1,v1,k2,v2>将key-value的类 型替代k1、v1、k2、v2
public class WordCountMapper extends Mapper<LongWritable, Text,Text,IntWritable> {//map回车后得到如下/* @Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {super.map(key, value, context);}*/private Text k2 = new Text();private IntWritable v2 = new IntWritable();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//map方法需要三个参数 k1      v1         上下文context;void无返回值// 通过context。write()将数据写出// context.write(k2,v2); 声明k2 v2//对map方法传进来的k1 v1 进行处理//将v1的类型转化为字符串并通过split进行切分,切分按照“,”进行//split切分后返回的一定是String类型的数组,通过Ctrl+Alt+V接收返回值// value.toString().split(",")通过Ctrl+Alt+V后如下String[] words = value.toString().split(",");//将words数组中的数据遍历 iter+回车得到for循环for (String word : words) {//通过k2.set()填充,将word放入k2k2.set(word);v2.set(1);context.write(k2,v2);}// context.write(k2,v2);将其放入for循环中使数据被遍历后输出}
}

WordCountReducer

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;//public class WordCountReducer extends Reducer<k2,v2,k3,v3>
//k3                                      v3 聚合
public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {//通过reduce+回车获取reduce方法/*  @Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {super.reduce(key, values, context);}*/
//    private Text k3 =new Text();因为k2和k3相同所以直接用传进reduce方法的key(k2)代替k3private IntWritable v3 = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {// 没有返回值方法reduce  k2             迭代器                    context.write(k3,v3)//相同数据的key放在同一个reduce中   所以k2和k3都是一个东西// 对传进来的数据进行遍历iter+回车获取for循环int sum =0;//通过sum对v3求和for (IntWritable value : values) {//通过value.get()获取传进来的value//通过Ctrl+Alt+V使得value.get()获取一个整数类型的返回值int i = value.get();sum += i;v3.set(sum);//放一个和}context.write(key,v3);}
}

WordCount词频统计相关推荐

  1. Hadoop | MapReduce之 WordCount词频统计

    WordCount词频统计 词频统计 WordCountMap.java // Map类,继承于org.apache.hadoop.mapreduce.Mapper; public class Wor ...

  2. MapReduce实现改进版WordCount词频统计

    新手入门MapReduce实现改进版WordCount词频统计 一.实验任务要求 本实验是为了实现改进版的词频统计WordCount.要求根据所给的英文名著数据集和停用词表,统计英文名著数据集中词频, ...

  3. python写wordcount_Python开发Spark应用之Wordcount词频统计

    一个早上只做了一点微小的工作,很忏愧.但是发现Spark这玩意还是蛮有意思的.下面给大家介绍一下如何用python跑一遍Wordcount的词频统计的示例程序. 在operator模块中导入add类f ...

  4. MapReduce编写实现wordcount词频统计

    p>首先编写WordCountDriver: package com.jym.hadoop.mr.demo; import java.io.IOException; import org.apa ...

  5. 12.MapReduce第2部分(WordCount词频统计、自然连接)

    一.程序要求 二.WordCount设计思路 假设三个分片,分别输入到三个不同的Map任务中去 行号:key 内容:value 三.MapReduce的具体应用之自然连接 举例子:

  6. Hadoop的环境配置——搭建一个主机hadoop102,两个从机hadoop103,hadoop104,并运行分布式词频统计

    本文是跟着B站上的视频实现的,链接如下: https://www.bilibili.com/video/BV1Qp4y1n7EN?p=18 Hadoop运行环境搭建 重来3遍是正常的,这篇针对的是怎么 ...

  7. 使用Hadoop自带的例子wordcount实现词频统计

    Hadoop中自带的hadoop-mapreduce-examples-2.7.6.jar含有一些事例,本文将用wordcount实现词频统计.具体步骤如下: 1. 启动Hadoop 切换到Hadoo ...

  8. Java实现词频统计(Wordcount)-Map或Hashtable的value排序

    我们在文本操作时,经常需要用到词频统计,并对统计后的词频进行排序,然后输出. 以下是我写的一个供大家参考: package com.qian;import java.io.BufferedReader ...

  9. python词频统计完整步骤_python实现词频统计(wordcount)函数

    作为字典(key-value)的经典应用题目,单词统计几乎出现在每一种语言键值对学习后的必练题目,主要需求: 写一个函数wordcount统计一篇文章的每个单词出现的次数(词频统计).统计完成后,对该 ...

最新文章

  1. java中json重复数据结构_JS实现去除数组中重复json的方法示例
  2. 从单张图像学习双目图像
  3. iOS后台下载功能(收集)
  4. golang 获取公网ip 内网ip 检测ip类型 校验ip区间 ip地址string和int转换 判断ip地区国家运营商
  5. python用哪个软件好-4个备受欢迎的Python程序库 你用哪个?
  6. EXC_BAO_ACCESS引起的奔溃信息
  7. 只用redis不用mysql的项目_干货!带你了解为什么那么多开源项目都是用Redis!
  8. java vips 算法_[Java] 22G传智播客java JavaEE+物联云计算 就业班(非基础班) 视频...
  9. iris鸢尾花数据集java_鸢尾花数据集(Iris)
  10. 单片机入门教程之认识单片机
  11. 张一鸣宣布卸任字节跳动CEO!
  12. 关于阿里云域名购买与DNS解析教程
  13. 考研高数 专题7:方程根的存在性及个数(零点定理-罗尔定理;单调性-罗尔定理推论)
  14. 计算机与交换机基础配置入门,新手入门篇:交换机配置窍门深入学习 -电脑资料...
  15. WPS文字绿色版下载 WPS Office 2010 中文绿色版
  16. echarts散点图中大小_ECharts如何实现散点图
  17. linux_时区修改
  18. 在python中元素是无序不重复的_set()函数~~创建一个无序不重复元素集
  19. KZ笔记5:连跳丧失速度的原因
  20. BZOJ 3698 XWW的难题:有上下界的最大流

热门文章

  1. javascript全局变量
  2. https证书申请过程(用于nginx)
  3. mysql 5.6.5压缩包_为什么mysql5.6比5.5安装包大那么多
  4. linux删除历史操作命令
  5. [项目]SSM+Vue智能点餐系统
  6. CAD软件版本过低无法打开CAD图纸
  7. Java static理解
  8. Python爬虫实战:爬取steam打折优惠数据
  9. 2022年河南省高等职业教育技能大赛软件测试赛项竞赛方案
  10. vue项目跳转新页面滚动到顶部