MongoDB实战(4)MapReduce
在 MongoDB 上使用 Map/Reduce进行并行"统计"很容易。
使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),
遍历 collection 中所有的记录, 将key 与 value 传递给 Reduce 函数进行处理。
Map函数和Reduce函数可以使用 JavaScript 来实现,可以通过 db.runCommand 或 mapReduce 命令来执行一个MapReduce 的操作:
db.runCommand( {mapReduce: <collection>,map: <function>,reduce: <function>,out: <output>,query: <document>,sort: <document>,limit: <number>,finalize: <function>,scope: <document>,jsMode: <boolean>,verbose: <boolean> })
参数说明:
mapreduce: 要操作的目标集合。
map: 映射函数 (生成键值对序列,作为 reduce 函数参数)。
reduce: 统计函数。
out: 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
query: 目标记录过滤
sort: 目标记录排序。
limit: 限制目标记录数量。
finalize: 最终处理函数 (对 reduce 返回结果进行最终整理后存入结果集合)
scope: 向 map、reduce、finalize 导入外部变量。
jsMode: 是否转换Bson格式在map和reduce执行间
verbose: 显示详细的时间统计信息。
下面我们来搞一个例子吧:
准备一些数据:
接下来我们演示如何统计各个班的学生数量
Map:
Map 函数必须调用 emit(key, value) 返回键值对,使用 this 访问当前待处理的 Document。
m = function(){emit(this.classid,1); }
value 可以使用 JSON Object 传递 (支持多个属性值)。
例如:emit(this.classid, {count:1})
Reduce:
Reduce 函数接收的参数类似 Group 效果,将 Map 返回的键值序列组合成 { key, [value1,
value2, value3, value...] } 传递给 reduce。
r = function(key,values){var x = 0;values.forEach(function(v){x += v});return x; }
Reduce 函数对这些 values 进行 "统计" 操作,返回结果可以使用 JSON Object。
Result:
mapReduce() 将结果存储在 "students_res" 表中。
Finalize:
利用 finalize() 我们可以对 reduce() 的结果做进一步处理。
f = function(key,value){return {classid:key,count:value} }
我们再重新计算一次,看看结果:
Options:
我们还可以添加更多的控制细节。
db.runCommand({mapreduce:"stu",map:m,reduce:r,out:"stu_res",finalize:f,query:{age:{$gt:10}} });
可以看到先进行了过滤,只取 age>10 的数据,然后再进行统计,所以就没有 age=9 的数
据了。
转载于:https://blog.51cto.com/janephp/1323812
MongoDB实战(4)MapReduce相关推荐
- MongoDB实战经验分享
2019独角兽企业重金招聘Python工程师标准>>> 转自: http://www.cnblogs.com/ymind/archive/2012/04/25/2470551.htm ...
- 《大数据存储:MongoDB实战指南》一1.1 什么是大数据
本节书摘来异步社区<大数据存储:MongoDB实战指南>一书中的第1章,第1.1节,作者: 郭远威 , 彭文波 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区" ...
- 国外经典!架构师必备:《MongoDB实战》第2版
0.MongoDB优点与学习重要性 MongoDB是最流行的NoSQL数据库!MongoDB在NoSQL中排名第一!它高性能.轻量级,易于扩展.适用于移动互联网敏捷发展的需求.架构师必备!MongoD ...
- MongoDB实战系列之二:MongoDB的常用操作
#以服务方式启动mongodb,要求验证 /elain/apps/mongodb/bin/mongod --fork --port 27001 --auth --dbpath /elain/data/ ...
- vue+websocket+express+mongodb实战项目(实时聊天)(一)
##vue+websocket+express+mongodb实战项目(实时聊天)(一) 在原来基础上增加了多个聊天室以及发送图片[vue+websocket+express+mongodb实战项目( ...
- 徐雷:做最好的自己!写在《mongodb实战》第2版和《WCF服务编程》第4版出版之际...
做最好的自己:写在<mongodb实战>第2版和<WCF服务编程>第4版出版之际.很久之前我写过一个类似的文章. 这篇文章写给过去的10.也写给未来的自己. 你是否对自己的未来 ...
- MongoDB 实战(一)基于PyMongo的电影影评分析 | 对数据结果进行可视化展示以及分析 | 评论词云 | 分时间段分析
文章目录 一.运行环境 二.实战介绍 三.获取数据 四.PyMongo 实战 4.1 连接MongoDB.创建集合 4.2 向 MongoDB 插入文档 4.3 查询MongoDB的数据 4.4 同样 ...
- 《OD大数据实战》MapReduce实战
一.github使用手册 1. 我也用github(2)--关联本地工程到github 2. Git错误non-fast-forward后的冲突解决 3. Git中从远程的分支获取最新的版本到本地 4 ...
- 大数据之Hadoop学习——动手实战学习MapReduce编程实例
文章目录 一.MapReduce理论基础 二.Hadoop.Spark学习路线及资源收纳 三.MapReduce编程实例 1.自定义对象序列化 需求分析 报错:Exception in thread ...
最新文章
- origin做主成分分析图_如何用SPSS做主成分分析?学习资料集锦
- 获取当前脚本所在的绝对路径
- Delphi处理TWebBrowser的Close事件
- c语言现代方法16章 基础、课后习题、基础等
- 浅谈对BFC的认识,以及用bfc解决浮动问题
- 程序员爱护自己身体的几点建议
- 基于visual Studio2013解决C语言竞赛题之0304整除数
- LSGO软件技术团队2015~2016学年第十一周(1109~1115)总结
- 两个pv挂一个vg_王者荣耀2020世冠杯小组赛全部结束,TS和AG、QG和E星一个半区
- Visual Studio 2013 + Intel(R) Visual Fortran 安装教程
- 查看python源码位置方法以及潜在误区
- PMP复习整理考点篇【9】--- 实施定性风险分析与实施定量风险分析
- 北京地区的图像处理公司
- 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1525445485395...
- vue-ueditor-wrap集成135编辑器
- 利用OpenCV识别图片背景是否透明
- 计算机学院品牌活动,计算机学院研究生会举办十佳健康品牌活动
- PLC课程设计【博途】
- L2-2 小字辈 (25 分)
- 新概念英语精讲 钟平 pdf_报告!“新概念”加入学而思英语群聊!