WordCount词频统计
@WordCount词频统计详解(乱序版)
WordCount主要分三部分:
WordCountMain、WordCountMapper、WordcountReducerWordCountMain: 用来统筹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词频统计相关推荐
- Hadoop | MapReduce之 WordCount词频统计
WordCount词频统计 词频统计 WordCountMap.java // Map类,继承于org.apache.hadoop.mapreduce.Mapper; public class Wor ...
- MapReduce实现改进版WordCount词频统计
新手入门MapReduce实现改进版WordCount词频统计 一.实验任务要求 本实验是为了实现改进版的词频统计WordCount.要求根据所给的英文名著数据集和停用词表,统计英文名著数据集中词频, ...
- python写wordcount_Python开发Spark应用之Wordcount词频统计
一个早上只做了一点微小的工作,很忏愧.但是发现Spark这玩意还是蛮有意思的.下面给大家介绍一下如何用python跑一遍Wordcount的词频统计的示例程序. 在operator模块中导入add类f ...
- MapReduce编写实现wordcount词频统计
p>首先编写WordCountDriver: package com.jym.hadoop.mr.demo; import java.io.IOException; import org.apa ...
- 12.MapReduce第2部分(WordCount词频统计、自然连接)
一.程序要求 二.WordCount设计思路 假设三个分片,分别输入到三个不同的Map任务中去 行号:key 内容:value 三.MapReduce的具体应用之自然连接 举例子:
- Hadoop的环境配置——搭建一个主机hadoop102,两个从机hadoop103,hadoop104,并运行分布式词频统计
本文是跟着B站上的视频实现的,链接如下: https://www.bilibili.com/video/BV1Qp4y1n7EN?p=18 Hadoop运行环境搭建 重来3遍是正常的,这篇针对的是怎么 ...
- 使用Hadoop自带的例子wordcount实现词频统计
Hadoop中自带的hadoop-mapreduce-examples-2.7.6.jar含有一些事例,本文将用wordcount实现词频统计.具体步骤如下: 1. 启动Hadoop 切换到Hadoo ...
- Java实现词频统计(Wordcount)-Map或Hashtable的value排序
我们在文本操作时,经常需要用到词频统计,并对统计后的词频进行排序,然后输出. 以下是我写的一个供大家参考: package com.qian;import java.io.BufferedReader ...
- python词频统计完整步骤_python实现词频统计(wordcount)函数
作为字典(key-value)的经典应用题目,单词统计几乎出现在每一种语言键值对学习后的必练题目,主要需求: 写一个函数wordcount统计一篇文章的每个单词出现的次数(词频统计).统计完成后,对该 ...
最新文章
- java中json重复数据结构_JS实现去除数组中重复json的方法示例
- 从单张图像学习双目图像
- iOS后台下载功能(收集)
- golang 获取公网ip 内网ip 检测ip类型 校验ip区间 ip地址string和int转换 判断ip地区国家运营商
- python用哪个软件好-4个备受欢迎的Python程序库 你用哪个?
- EXC_BAO_ACCESS引起的奔溃信息
- 只用redis不用mysql的项目_干货!带你了解为什么那么多开源项目都是用Redis!
- java vips 算法_[Java] 22G传智播客java JavaEE+物联云计算 就业班(非基础班) 视频...
- iris鸢尾花数据集java_鸢尾花数据集(Iris)
- 单片机入门教程之认识单片机
- 张一鸣宣布卸任字节跳动CEO!
- 关于阿里云域名购买与DNS解析教程
- 考研高数 专题7:方程根的存在性及个数(零点定理-罗尔定理;单调性-罗尔定理推论)
- 计算机与交换机基础配置入门,新手入门篇:交换机配置窍门深入学习 -电脑资料...
- WPS文字绿色版下载 WPS Office 2010 中文绿色版
- echarts散点图中大小_ECharts如何实现散点图
- linux_时区修改
- 在python中元素是无序不重复的_set()函数~~创建一个无序不重复元素集
- KZ笔记5:连跳丧失速度的原因
- BZOJ 3698 XWW的难题:有上下界的最大流