mongoDB(3) mapReduce
mapReduce是大数据的核心内容,但实际操作中别用这个,所谓的mapReduce分两步
1.map:将数据分别取出,Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理
2.reduce:负责数据的最后处理,function(key,value){} 参数是map传来的key和value
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作,有点类似于使用Hadoop对集合数据进行处理,所有输入数据都是从集合中获取,而MapReduce后输出的数据也都会写入到集合中。通常类似于我们在SQL中使用Group By语句一样。
在mongodb中实现mapReduce是复杂度相当高的。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作.
db.runCommand(
{ mapreduce : <collection>,
map : <mapfunction>,
reduce : <reducefunction>,
out : <see output options below>
[, query : <query filter object>]
[, sort : <sorts the input objects using this key. Useful for optimization, like sorting by the emit key for fewer reduces>]
[, limit : <number of objects to return from collection, not supported with sharding>]
[, keeptemp: <true|false>]
[, finalize : <finalizefunction>]
[, scope : <object where fields go into javascript global scope >]
[, jsMode : true]
[, verbose : true]
}
);
参数讲解:
mapreduce:要操作的目标集合
map:映射函数(生成键值对序列,作为Reduce函数的参数)
reduce:统计函数
query:目标记录过滤
sort:对目标记录排序
limit:限制目标记录数量
out:统计结果存放集合(如果不指定则使用临时集合,在客户端断开后自动删除)
keeptemp:是否保留临时集合
finalize:最终处理函数(对reduce返回结果执行最终整理后存入结果集合)
scope:向map、reduce、finalize导入外部变量
verbose:显示详细的时间统计信息
/*
* 1.map:定义好分组的条件,以及每个集合要取出来的内容
* emit传给了reduce的{key,[value1,value2,value3,……]}
* 2.{sex:'sex'+ this.sex,name:'333'+this.name} 取出来的所有的内容,都给了values [{},{},{},{},{}]
* 3.reduce的key,values,
* key:是emit的第一个值,{sex:this.sex,name:this.name}
* values: 是emit的第二个组成的数组
* */
db.runCommand({
mapReduce:'logs',
map:function(){
emit({sex:this.sex,name:this.name}, {sex:'sex'+ this.sex,age:3+this.age});
},
reduce:function(key,values){
var x = 0;
values.forEach(function (v) {x += v.age;});
return {key:key,x:x};
},
out:"students_result"
});
/*
{ "_id" : { "sex" : "女", "name" : 0 }, "value" : { "sex" : "sex女", "age" : 23 } }
{ "_id" : { "sex" : "女", "name" : 1 }, "value" : { "sex" : "sex女", "age" : 24 } }
{ "_id" : { "sex" : "女", "name" : 2 }, "value" : { "sex" : "sex女", "age" : 25 } }
{ "_id" : { "sex" : "女", "name" : 3 }, "value" : { "sex" : "sex女", "age" : 26 } }
{ "_id" : { "sex" : "女", "name" : 4 }, "value" : { "sex" : "sex女", "age" : 27 } }
{ "_id" : { "sex" : "女", "name" : 5 }, "value" : { "sex" : "sex女", "age" : 28 } }
{ "_id" : { "sex" : "女", "name" : 6 }, "value" : { "sex" : "sex女", "age" : 29 } }
{ "_id" : { "sex" : "女", "name" : 7 }, "value" : { "sex" : "sex女", "age" : 30 } }
{ "_id" : { "sex" : "女", "name" : 8 }, "value" : { "sex" : "sex女", "age" : 31 } }
{ "_id" : { "sex" : "女", "name" : 9 }, "value" : { "sex" : "sex女", "age" : 32 } }
*/
/*
* key:是emit的第一个值,this.sex
* values: 是emit的第二个组成的数组
* */
db.runCommand({
mapReduce:'logs',
map:function(){
emit(this.sex, {sex:'sex'+ this.sex,age:3+this.age});
},
reduce:function(key,values){
var x = 0;
values.forEach(function (v) {x += v.age;});
return {key:key,x:x};
},
out:"students_result"
});
//{ "_id" : "女", "value" : { "key" : "女", "x" : 275 } }
-
mongoDB(3) mapReduce的更多相关文章
- MongoDB 的 MapReduce 大数据统计统计挖掘
MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...
- MongoDb 用 mapreduce 统计留存率
MongoDb 用 mapreduce 统计留存率(金庆的专栏)留存的定义采用的是新增账号第X日:某日新增的账号中,在新增日后第X日有登录行为记为留存 输出如下:(类同友盟的留存率显示)留存用户注册时 ...
- mongoDB实现MapReduce
一.MongoDB Map Reduce Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).MongoDB提供的Ma ...
- MongoDB:Map-Reduce
Map-reduce是一个考虑大型数据得到实用聚集结果的数据处理程式(paradigm).针对map-reduce操作,MongoDB提供来mapreduce命令. 考虑以下的map-reduce操作 ...
- MongoDB中mapReduce的使用
MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map = function ...
- mongodb 聚合(Map-Reduce)
介绍 Map-reduce 是一种数据处理范式,用于将大量数据压缩为有用的聚合结果.对于 map-reduce 操作,MongoDB 提供MapReduce数据库命令. MongoDB中的MapRed ...
- 在MongoDB的MapReduce上踩过的坑
太久没动这里,目前人生处于一个新的开始.这次博客的内容很久前就想更新上来,但是一直没找到合适的时间点(哈哈,其实就是懒),主要内容集中在使用Mongodb时的一些隐蔽的MapReduce问题: 1.R ...
- MongoDB进行MapReduce的数据类型
有很长一段时间没更新博客了,因为最近都比较忙,今天算是有点空闲吧.本文主要是介绍MapReduce在MongoDB上的使用,它与sql的分组.聚集类似,也是先map分组,再用reduce统计,最后还可 ...
- MongoDB下Map-Reduce使用简单翻译及示例
目录 Map-Reduce JavaScript 函数 Map-Reduce 行为 一个简单的测试 原文地址https://docs.mongodb.com/manual/core/map-reduc ...
随机推荐
- ACM 蛇形填数
蛇形填数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 1 ...
- 自己收集原生js-2014-2-23
(function(){})( window.EventUtil={ addHandler:function(element,type,handler){ // alert(1); if(elemen ...
- 构建json数据post到接口的若干条规则
接受数据接口: public ActionResult PostDownloadLog(PostDownloadLog postDownloadLogs) PostDownLoadLogL类 publ ...
- 20145330《Java程序设计》第四次实验报告
20145330<Java程序设计>第四次实验报告 实验四 Android环境搭建 实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 搭建A ...
- PHP slim restfull框架nginx 配置
http://docs.slimframework.com/ 下载地址这个东西很不错,照到官方的例子做 <?php require 'vendor/autoload.php'; $app = n ...
- DBLink创建 ORA-12154: TNS: 无法解析指定的连接标识符
因为对oracle不了解,这个问题可TM的搞了好久! 走的弯路: 1. 在客服端的PLSQL连接工具上折腾,而不是在服务器的PLSQL解决 2. 配置的tnsnames.org文件在环境变量path( ...
- java中instanceof和getClass()的区别分析
class A { } class B extends A { } Object o1 = new A(); Object o2 = new B(); o1 instanceof A => t ...
- 【资源】mp3的外链资源
做开发有时候会遇到需要mp3外链来进行程序的调试,但是自己搭建服务器比较麻烦,而主流的音乐平台都不提供外链音乐.晚上偶得一外链mp3的网站,标记之: http://9hok.com/
- Jfinal中手动提交/回滚 事物
在Jfinal中有个Tx类为事物声明类 在方法或controller上面加@Before({Tx.class})即可,可是这样并不能满足有的业务场景 下面是今天写的手动提交的事物处理方法,希望对大家有 ...
- jq实现点击表格无刷新修改数据,优化版
<!-------------------修改密码-------------------------- > $("#pwd").live("click&quo ...