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算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ... 
随机推荐
- get 发送ajax请求
			上demo小案例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ... 
- mac上安装ruby
			(转:http://www.cnblogs.com/daguo/p/4097263.html) 以下代码区域,带有 $ 打头的表示需要在控制台(终端)下面执行(不包括 $ 符号) 步骤0 - 安装系统 ... 
- Spring-IOC源码解读2.2-BeanDefinition的载入和解析过程
			1. 对IOC容器来说这个载入过程就像是相当于把BeanDefinition定义的信息转化成Spring内部表示的数据结构.容器对bean的管理和依赖注入过程都是通过对其持有的BeanDefiniti ... 
- Linux之VMware虚拟机取消DHCP
			1.点击编辑项 2.选择VMnet1 点击更改设置 3.选择VMnet1 去掉使用本地DHCP服务 点击应用 原文地址:https://blog.csdn.net/star_in_shy/arti ... 
- Codeforces891C. Envy
			$n \leq 5e5$,$m \leq 5e5$的无向边权图,$q \leq 5e5$个询问,每次问一系列边是否能同时存在于某棵最小生成树上. 一条边在最小生成树上,当比他小的边都加入后,加入他会使 ... 
- 转载  gdb调试程序
			转载自csdn,作者haoel,链接http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一 ... 
- Laravel 之Composer
			Composer是php的依赖管理工具,不是包管理器. 安装方式: (1)Composer-Setup.exe Win操作系统.需FQ (2)composer.phar 通用安装方式.不需要FQ,wi ... 
- ubuntu下用webbench做网站压力测试
			安装依赖 exuberant-ctags sudo apt-get install exuberant-ctags 下载源码并安装 wget http://blog.s135.com/soft/lin ... 
- BZOJ——1626: [Usaco2007 Dec]Building Roads 修建道路
			http://www.lydsy.com/JudgeOnline/problem.php?id=1626 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1 ... 
- BZOJ——1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
			http://www.lydsy.com/JudgeOnline/problem.php?id=1607 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 2 ... 
