MapReduce算法形式一:WordCount
MapReduce算法形式一:WordCount
这种形式可以做一些网站登陆次数,或者某个电商网站的商品销量啊诸如此类的,主要就是求和,但是求和之前还是要好好清洗数据的,以免数据缺省值太多,影响真实性。
废话不多说,上代码吧,我把注释一行行的都写了~~可可可可~
先封装了数据行的对象:
public class Log {
private String time;
private String UID;
private String keyWord;
private int rank;
private int order;
private String URL;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getUID() {
return UID;
}
public void setUID(String uID) {
UID = uID;
}
public String getKeyWord() {
return keyWord;
}
public void setKeyWord(String keyWord) {
this.keyWord = keyWord;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}
public String getURL() {
return URL;
}
public void setURL(String uRL) {
URL = uRL;
}
public Log(String time, String uID, String keyWord, int rank, int order,String uRL) {
super();
this.time = time;
this.UID = uID;
this.keyWord = keyWord;
this.rank = rank;
this.order = order;
this.URL = uRL;
}
public Log() {
super();
}
/*
* 对行记录日志信息进行封装成对象
* 并将对象返回
*/
public static Log getInfo(String value){
Log log = new Log();
//将一条日志记录转换成一个数组
String[] lines = value.toString().trim().split("\t");
//判断行记录中间是否有缺省值
if(lines.length == 6){
//行记录封装
log.setTime(lines[0].trim());
log.setUID(lines[1].trim());
log.setKeyWord(lines[2].trim());
log.setRank(Integer.parseInt(lines[3].trim()));
log.setOrder(Integer.parseInt(lines[4].trim()));
log.setURL(lines[5].trim());
}
return log;
}
}
mr中的代码:
public class PVSum {
/**案例一:WordCount
*
* 非空查询条数
* 不去重,直接统计总和即可
*
* 假设:
* 日志格式如下:(已经过清洗,以制表符分割)
* 20111230050630 时间time
* 2a12e06f50ad41063ed2b62bffac29ad 用户UID
* 361泰国电影 搜索的关键词keyword
* 5 rank搜索结果排序
* 8 order点击次数
* http://www.57ge.com/play/?play_2371_1_361.html 访问的URL
*
* @param args
* @throws Exception
*/
public static void main(String[] path) throws Exception {
if(path.length != 2){
System.out.println("please input full path!");
System.exit(0);
}
Job job = Job.getInstance(new Configuration(), PVSum.class.getSimpleName());
job.setJarByClass(PVSum.class);
FileInputFormat.setInputPaths(job, new Path(path[0]));
FileOutputFormat.setOutputPath(job, new Path(path[1]));
job.setMapperClass(PVSumMap.class);
job.setReducerClass(PVSumReduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.waitForCompletion(true);
}
public static class PVSumMap extends Mapper<LongWritable, Text, Text, IntWritable> {
IntWritable one = new IntWritable(1);//记录数量,一条记录即为1
Text text = new Text("非空关键词的PV访问量总计:");
protected void map(LongWritable key, Text value,org.apache.hadoop.mapreduce.Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws java.io.IOException, InterruptedException {
//获取每条记录的对象
Log log = Log.getInfo(value.toString().trim());
//判断关键字是否为空
if(log.getKeyWord().trim() != null && !log.getKeyWord().trim().equals("")){
//写入数据
context.write(text, one);
//map : <非空关键词的PV访问量总计:, 1>
}
};
}
//shuffle : <非空关键词的PV访问量总计:, {1, 1, 1...}>
public static class PVSumReduce extends Reducer<Text, IntWritable, Text, IntWritable> {
protected void reduce(Text key, java.lang.Iterable<IntWritable> values,
org.apache.hadoop.mapreduce.Reducer<Text, IntWritable, Text, IntWritable>.Context context)
throws java.io.IOException, InterruptedException {
int sum = 0;//记录总条数
for (IntWritable count : values) {
sum += count.get();
}
context.write(key, new IntWritable(sum));
};
}
}
MapReduce算法形式一:WordCount的更多相关文章
- MapReduce算法形式六:只有Map独自作战
案例六:Map独自直接输出 之前一直没有用过这个map独自输出的模式,就算是输出一些简单的我也会经过一次reduce输出,但是,发现这个map输出的结果跟我预想的有点不一样,我一直以为shuffle的 ...
- MapReduce算法形式五:TOP—N
案例五:TOP—N 这个问题比较常见,一般都用于求前几个或者后几个的问题,shuffle有一个默认的排序是正序的,但如果需要逆序的并且暂时还不知道如何重写shuffle的排序规则的时候就用以下方法就行 ...
- MapReduce算法形式四:mapjoin
案例四:mapjoin(对个map共同输入,一个reduce) 这个方法主要解决的是,几个表之间的比较,类似于数据库的内外连接,还有一些左右连接之类的,简而言之就是,A表没有的B表有,B表有的A没有或 ...
- MapReduce算法形式三:cleanup
案例三:cleanup 其实这个案例可以不用写这么复杂,不用cleanup也能写,但是为了,突显,突显,突显(重要的事说四遍)cleanup的重要性,琢磨了半天,恩,这样写既可以突显cleanup又显 ...
- MapReduce算法形式二:去重(HashSet)
案例二:去重(shuffle/HashSet等方法)shuffle主要针对的是key去重HashSet主要针对values去重
- MapReduce算法形式二:去重(shuffle)
案例二:去重(shuffle/HashSet等方法)shuffle主要针对的是key去重HashSet主要针对values去重
- hadoop笔记之MapReduce的应用案例(WordCount单词计数)
MapReduce的应用案例(WordCount单词计数) MapReduce的应用案例(WordCount单词计数) 1. WordCount单词计数 作用: 计算文件中出现每个单词的频数 输入结果 ...
- 海量数据挖掘MMDS week6: MapReduce算法(进阶)
http://blog.csdn.net/pipisorry/article/details/49445519 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 如何简单解释 MapReduce算法
原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...
随机推荐
- P2015 二叉苹果树 (树形动规)
题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...
- pageContext,request,session,application生命周期
equest是封装client端(也就是用户通过browser)提交的请求数据和属性的对象. response是封装web server端响应数据和属性的对象. 我们经常会将pageContext.r ...
- robotframework安装和配置【转IBM:https://www.ibm.com/developerworks/cn/opensource/os-cn-robot-framework/index.html】
内容 概览 Robot Framework 介绍 Robot Framework 的安装和配置 RIDE 编辑器介绍 创建测试项目 简单的测试用例的编写 总结 相关主题 评论 Robot Fr ...
- C# 实现刻录光盘功能
最近公司提出一个需求,要把公司系统的图像刻录成光盘(公司系统是医院放射科系统,很多放射科的图像) 查看了很多资料发现有两个比较可靠 1:使用IMAPI2,进行文件的光盘刻录,具体实例可以参照以下链接: ...
- 线段树练习5(codevs 4927)
题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b]内的所有数都增加c set a b c:把区间[a,b]内的所有数都设为c sum a b:查询区间[a,b] ...
- raspberrypi树莓派liunx下安装golang1.9环境(debian)
直接安装go1.6以上版本会出现提示 Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4. Go1.9的构建过程需要用于引导的 Go1.4二 ...
- Netty构建游戏服务器(二)--Hello World
一,准备工作 1,netty-all-4.1.5.Final.jar(官网下载) 2,eclipse 二,步骤概要 1,服务器开发 (1),创建Server类 该类是程序的主入口,有main方法,服务 ...
- T3187 队列练习3 codevs
http://codevs.cn/problem/3187/ 题目描述 Description 比起第一题,本题加了另外一个操作,访问队头元素(编号3,保证访问队头元素时或出队时队不为空),现在给出这 ...
- Heavy Transportation(最短路)
poj 1797 ——Heavy Transportation 思路: 这道题我们可以采用类似于求最短路径的方法,用一种新的“松弛操作”去取代原本的方法. 我们可以记录d[u]为运送货物到点j时最大可 ...
- (入门SpringBoot)SpringBoot项目数据源以及整合mybatis(二)
1.配置tomcat数据源: # 数据源基本配置spring.datasource.url=jdbc:mysql://localhost:3306/shoptest?useUnicode=true ...