测试环境:192.168.1.55

mongo 192.168.1.55:30001
show dbs
use gwgps

测试目标,求出两个班的总数,人数,平均分数等。
可以根据不同的业务需求,定制map,reduce,finalize函数。

1. 数据准备
db.person1.insert({'class':1,'name':'n1',age:5,score:90,nation:'汉'})
db.person1.insert({'class':1,'name':'n2',age:6,score:92,nation:'汉'})
db.person1.insert({'class':1,'name':'n3',age:5,score:92,nation:'苗'})
db.person1.insert({'class':1,'name':'n4',age:8,score:96,nation:'藏'})
db.person1.insert({'class':1,'name':'n5',age:8,score:98,nation:'汉'})
db.person1.insert({'class':1,'name':'n6',age:9,score:98,nation:'汉'})
db.person1.insert({'class':1,'name':'n7',age:4,score:91,nation:'藏'})
db.person1.insert({'class':1,'name':'n8',age:8,score:96,nation:'苗'})
db.person1.insert({'class':2,'name':'n9',age:9,score:95,nation:'苗'})
db.person1.insert({'class':2,'name':'n10',age:9,score:96,nation:'藏'})
db.person1.insert({'class':2,'name':'n11',age:9,score:92,nation:'苗'})
db.person1.insert({'class':2,'name':'n12',age:8,score:91,nation:'汉'})
db.person1.insert({'class':2,'name':'n13',age:7,score:99,nation:'汉'})
db.person1.insert({'class':2,'name':'n14',age:7,score:98,nation:'汉'})
db.person1.insert({'class':2,'name':'n15',age:2,score:99,nation:'内蒙'})

2.编写map函数
map=function(){
var val ={class:this.class,total_score:this.score,count:1,avg_score:0};
emit(this.class,val);
}

3.编写ruduce函数
reduce=function(key,values){
var reducedObject = {class: key,total_score: 0,count:0, avg_score:0};
for (var i = 0; i < values.length; i++) { 
reducedObject.total_score += values[i].total_score; 
reducedObject.count +=values[i].count; 
}
if(reducedObject.count>0)
reducedObject.avg_score =reducedObject.total_score /reducedObject.count;
return reducedObject;
}

4.执行mapReduce函数,生成结果collection.
db.person1.mapReduce(map,reduce,{out: "r2"})

5.查询执行结果
mongos> db.r2.find() { "_id" : 1, "value" : { "class" : 1, "total_score" : 753, "count" : 8, "avg_score" : 94.125 } } { "_id" : 2, "value" : { "class" : 2, "total_score" : 670, "count" : 7, "avg_score" : 95.71428571428571 } }

mapreduce运用的更多相关文章

  1. Mapreduce的文件和hbase共同输入

    Mapreduce的文件和hbase共同输入 package duogemap;   import java.io.IOException;   import org.apache.hadoop.co ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  4. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  5. [Hadoop in Action] 第5章 高阶MapReduce

    链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter   1.链接MapReduce作业   [顺序链接MapReduce作业]   mapreduce-1 | mapr ...

  6. MapReduce

    2016-12-21  16:53:49 mapred-default.xml mapreduce.input.fileinputformat.split.minsize 0 The minimum ...

  7. 使用mapreduce计算环比的实例

    最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spark计算,可是本人目前spark还只是简单看了下,因此就先改用mapreduce计算了,今天和大家分享下这个 ...

  8. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  9. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  10. MapReduce剖析笔记之六:TaskTracker初始化任务并启动JVM过程

    在上面一节我们分析了JobTracker调用JobQueueTaskScheduler进行任务分配,JobQueueTaskScheduler又调用JobInProgress按照一定顺序查找任务的流程 ...

随机推荐

  1. 安装qmake与环境变量解析

    转自:http://www.kuqin.com/qtdocument/qmake-manual-2.html 安装qmake 当Qt被连编的时候,默认情况下qmake也会被连编. 这一部分解释如何手工 ...

  2. QML入门教程

    QML是Qt推出的Qt Quick技术的一部分,是一种新增的简便易学的语言.QML是一种陈述性语言,用来描述一个程序的用户界面:无论是什么样子,以及它如何表现.在QML,一个用户界面被指定为具有属性的 ...

  3. 类似于fopen与fopen64的种种情况

    在Linux和unix系统中,我们会遇到¥和¥64的情况.比如stat64,fopen64等 fopen64是linux特有 的,fopen64()函数和fopen()函数相同的,只是底层的文件描述符 ...

  4. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  5. zsh(yum装包的时候,有时候会不行)

    [root@GIT ~]# yum search zsh =============================== N/S Matched: zsh ====================== ...

  6. Linux使用tcpdump命令抓包保存pcap文件wireshark分析

    [root@ok Desktop]# yum search tcpdump Loaded plugins: fastestmirror, refresh-packagekit, security Lo ...

  7. .net学习笔记----HttpRequest类

    一.HttpRequest的作用 HttpRequest的作用是令到Asp.net能够读取客户端发送HTTP值.比如表单.URL.Cookie传递过来的参数. 返回字符串的那些值就不说了,那些基本上都 ...

  8. js 抽奖转盘实现

    今天用js实现转盘抽奖功能,从后台返回的值可以固定转盘选择停止的任意位置 实现代码如下: js: <script> , i = ;//auto:时间对象 count:计数器 ,i : 计数 ...

  9. LogBack sl4j 通过MDC实现日志记录区分用户Session[以Spring mvc为例]

    1.首先实现一个interceptor,在请求开始的时候MDC put一个Session标志,interceptor结束的时候remove掉   import javax.servlet.http.H ...

  10. C# 工程中引用出现感叹号

    问题:在工程中引用出现感叹号 原因1:  这是由于之前引用的Dll文件不见了. 右键有感叹号的项,然后选择 “属性” 里边有一个路径属性 这个路径就是之前这个Dll文件的路径,现在这个文件不在了,你需 ...