Step into MongoDB - 11 - MapReduce
来源:互联网 发布:网络新词汇2017 编辑:程序博客网 时间:2024/05/18 01:24
目录
- MapReduce
- 概述
- 与 group 的区别
- 执行步骤
- 使用
- 测试数据
- mapper
- reducer
- 运行 mapreduce
- MapReduce
摘要
MapReduce 概念,与 group 区别,使用
MapReduce
概述
- MapReduce 是聚合工具,可以实现 count,distinct,group 等功能。
- MapReduce 是并行化到多个服务器的聚合方法。它会拆开问题,发送到各个机器上,再从各个机器上汇聚结果返回。
与 group 的区别
- 由映射函数 (mapper) 用一个主键去调用
emit()
函数。而不是map()
函数返回转换过的值。这样的好处是每个文档可以不止发出一次。 - 效率比 group 慢,不适用于实时环境中,而应该用在后台任务中。
执行步骤
- 映射 (map) 将操作映射到集合中的每个文档。
- 洗牌 (shuffle) 按照键分组,并将产生的键值组成列表放到对应的键中。
- 化简 (reduce) 将列表中的值化简成一个单值。这个值被返回,接着再洗牌,直到每个键的列表只有一个值为止。
使用
测试数据
db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );db.things.insert( { _id : 2, tags : ['cat'] } );db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );db.things.insert( { _id : 4, tags : [] } );
mapper
map = function(){ this.tags.forEach( function(z){ emit( z , { count : 1 } ); } ); };
emit
返回一组键值对, key
为第一个参数,values
为第二组参数的集合
在上述例子中,即返回 {'dog' : [{ count : 1, { count:1 }], 'cat' : ...}
。
reducer
reduce = function(key, values) { var total = 0; for(var i = 0; i< values.length; i++) { total += values[i].count; } return { count : total };}
reduce
用于将 map
传递过来的 key-values
转变成 key-value
。其两个参数即为 emit
返回的参数。
运行 mapreduce
results = db.runCommand({ mapReduce : 'phones', map : map, reduce : reduce, out : 'phones.report'})db.phones.report.find({ '_id.country' : 8})
以上将结果存储到 phones.report
集合中,之后可以直接使用此表进行查询。
或者
db.things.mapReduce( map, reduce, { out : 'tmp' } )db.tmp.find()
参数含义
mapReduce
执行的集合名map
映射函数reduce
规约函数out
输出的集合名- 值为
{ inline : 1}
会直接输出结果而不是放到集合中。但是输出长度根据 MongoDB 的版本是有限制的。
- 值为
0 0
- Step into MongoDB - 11 - MapReduce
- Step into MongoDB - 02 - 数据类型
- Step into MongoDB - 09 - 索引
- Step into MongoDB - 14 - 分片
- Step into MongoDB - 15 - GridFS
- Step into MongoDB - 01 - 安装与运行
- Step into MongoDB - 03 - Database & Collection & Document
- Step into MongoDB - 04 - 简单查询
- Step into MongoDB - 05 - 插入与删除
- Step into MongoDB - 06 - 更新操作
- Step into MongoDB - 07 - 复杂查询
- Step into MongoDB - 08 - 聚合查询
- Step into MongoDB - 10 - 服务端命令
- Step into MongoDB - 12 - 主从复制
- Step into MongoDB - 13 - 副本集
- Step into MongoDB - 16 - 账号管理
- My First Step Into MongoDB – Installing MongoDB on Ubuntu
- Step into Scala - 11 - 类
- 解密ATS 4.2.3的缓存状态密码
- springmvc学习笔记(25)——数据格式化与数据校验
- [Python开发] python使用http通信
- 趣谈递归算法
- Netty初探-I/O对比
- Step into MongoDB - 11 - MapReduce
- Design and Implementation of the Sun Network File System
- 6类垃圾简历,有你吗?
- 安卓PagerAdapter在广告切换中的应用
- 服务端开发笔记一:服务器架构探索
- Step into Scala - 09 - 集合
- 持续集成3---远程构建
- D3DXCreateFont
- Android Universal Image Loader 源码分析