mongoDB的map reduce

mongoDB的map reduce使用

示例:

res = db.runCommand({

mapreduce:‘liveEpgUserVisits‘,

map:function() {

emit({provice:this.provice}, {"data":[{"mac":this.mac}],visit:this.visitNum, userCount:0});

},

reduce:function(key, value) {

var ret = {data:[]}, visit=0

var userCount=0;

var macs = {};

var sum = 0;

for(var i in value) {

var ia = value[i];

for(var j in ia.data) {

if(!macs[ia.data[j].mac]) {

macs[ia.data[j].mac] = true;

ret.data.push(ia.data[j]);

userCount += 1;

}

}

sum += Number(ia.visit);

}

ret.visit = sum;

ret.userCount = userCount;

return ret;

},

query:{"inputTime":{$gte:ISODate("2014-09-17T14:20:00Z"),$lte:ISODate("2014-09-17T14:30:00Z")}},

finalize:function(key, values){

return [{count:values.data.length},{visit:values.visit},{userCount:values.userCount}];

},

out:‘tmp_mo_spcode_consignid_1‘,

verbose:true

})

上面的示例,

map:key是省份,value是这个省份对应的mac值、访问数量、用户数量。

reduce:获取到每个省份的value,然后进行运算,在将结果返回。

通过finalize参数指定输出格式。如果不指定输出格式则会安装map的key和value格式进行输出。

其中db.runCommand包含以下参数:

db.runCommand(
 { mapreduce : <collection>,
   map : <mapfunction>,
   reduce : <reducefunction>
   [, query : <query filter object>]
   [, sort : <sort the query.  useful for optimization>]
   [, limit : <number of objects to return from collection>]
   [, out : <output-collection name>]
   [, keeptemp: <true|false>]
   [, finalize : <finalizefunction>]
   [, scope : <object where fields go into javascript global scope >]
   [, verbose : true]
 }
);


    - mapreduce:指定要进行mapreduce处理的collection

    - map:map函数

    - reduce:reduce函数

    - out:输出结果的collection的名字,不指定会默认创建一个随机名字的collection(如果使用了out选项,就不必指定keeptemp:true了,因为已经隐含在其中了)

    - query:一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)

    - sort:和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制

    - limit:发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

    - keytemp:true或false,表明结果输出到的collection是否是临时的,如果想在连接关闭后仍然保留这个集合,就要指定keeptemp为true,如果你用的是MongoDB的mongo客户端连接,那必须exit后才会删除。如果是脚本执行,脚本退出或调用close会自动删除结果collection

    - finalize:是函数,它会在执行完map、reduce后再对key和value进行一次计算并返回一个最终结果,这是处理过程的最后一步,所以finalize就是一个计算平均数,剪裁数组,清除多余信息的恰当时机

    - scope:javascript代码中要用到的变量,在这里定义的变量在map,reduce,finalize函数中可见

    - verbose:用于调试的详细输出选项,如果想看MpaReduce的运行过程,可以设置其为true。也可以print把map,reduce,finalize过程中的信息输出到服务器日志上。
				
时间: 2024-07-28 14:15:20

mongoDB的map reduce的相关文章

记一次MongoDB Map&amp;Reduce入门操作

需求说明 用Map&Reduce计算几个班级中,每个班级10岁和20岁之间学生的数量: 需求分析 学生表的字段: db.students.insert({classid:1, age:14, name:'Tom'}) 将classid随机1和2.age在8-25岁之间随机,name在3-7个字符之间随机. 数据写入 数据写入java脚本 往mrtask库中students写入1000万条数据: package org.test; import java.util.ArrayList; impor

mongodb Map/reduce测试代码

private void AccountInfo() { ls.Clear(); DateTime dt = DateTime.Now.Date; IMongoQuery query = Query<mtime_time>.GTE(p => p.showdate, dt); MapReduceOutput output = new MapReduceOutput("mtime_time_tem"); MongoCollection comcol = MongoFact

Node.js结合使用MongDb的Map.reduce功能进行大量数据简化处理办法

一年前,准备使用mongDb自带的map,reduce功能模拟hadoop,换个思路做一个简易的大数据分拆再结合存储的办法: 这个功能可以用于数据日志或者游戏数据之类,进行周期性归纳和按照自己需求重组数据; 以下代码实现了将每日数据collecttion:gameLog日期的数据统计出不同的collection.具体不详述,只讲思路和遇到的问题: 主要代码如下: var MongoClient = require('mongodb').MongoClient;MongoClient.connec

python中filter, map, reduce, lambda

python 中内置的几个函数filter, map, reduce, lambda简单的例子. #!/usr/bin/env python #_*_coding:utf-8_*_ #filter(function, sequence): #对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回. #可以看作是过滤函数. tasks = [ { 'id': 1, 'title

王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()

转载请注明出处:王亟亟的大牛之路 首先在这里祝愿大家,新年快乐,工作顺利,BUG少少!!! 本来说是在春节假期内继续维持着写文章的进度,但是还是偷懒了几天(打了4天SC2哈哈哈) 今天上的是关于Python的文章,毕竟在亲戚家拜年,懒得插各类手机调试什么的,况且确实好久没有弄Python了,就写了,废话不多,开始正题!! 函数式编程 函数是什么? 把复杂的操作化为简单的函数分解成简单的操作,这种操作就是面向过程,也就是C这类的实现的大体概念. 函数式是什么? 函数没有变量,任意一个函数,只要输入

lodash用法系列(4),使用Map/Reduce转换

Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>安装:npm install lodash 首先通过npm安装lodash:npm i --save lodash 在js文件中引用lodash:var _ =

Python经常使用内置函数介绍【filter,map,reduce,apply,zip】

Python是一门非常简洁,非常优雅的语言,其非常多内置函数结合起来使用,能够使用非常少的代码来实现非常多复杂的功能,假设相同的功能要让C/C++/Java来实现的话,可能会头大,事实上Python是将复杂的数据结构隐藏在内置函数中,用C语言来实现,所以仅仅要写出自己的业务逻辑Python会自己主动得出你想要的结果.这方面的内置函数主要有,filter,map,reduce,apply,结合匿名函数,列表解析一起使用,功能更加强大.使用内置函数最显而易见的优点是: 1. 速度快,使用内置函数,比

filter,map,reduce,lambda(python3)

1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个list.string.tuple(根据sequence类型决定)返回. 1 #!/usr/bin/env python 2 # encoding: utf-8 3 """ 4 @author: 侠之大者kamil 5 @file: filter.py 6 @time: 2016/4/

在YARN中,如何控制和监控map/reduce的并发数

配置建议: 1.     In MR1, the mapred.tasktracker.map.tasks.maximum and mapred.tasktracker.reduce.tasks.maximum properties dictated how many map and reduce slots each TaskTracker had. These properties no longer exist in YARN. Instead, YARN uses yarn.nodema