MongoDB MapReduce分组后的每一组数据如果大于100,那么他每次会取100条,归并完变成1条又返回给emit里面作为输入,继续判断余数是否大于100,大于100,取100条,周而复始,直到最后一次取数不大于100,运算完成后就结束。
需要特别说明的是,如果最后一次虽然不大于100,但是如果是1的话,那么不好意思,他直接就给到finalize了,跳过reduce函数。
原理剖析:
下面给出两个相同业务的运算逻辑。
第一种:注意costTime += (val.endTime - val.beginTime)+val.costTime;
var m = function(){ emit(this.url,{count:1,beginTime:this.rt,endTime:this.rpt,costTime:0}) } var r =function(key,values){ var cnt=0; var costTime = 0; var obj; values.forEach(function(val){ if(val.endTime != null && val.beginTime != null){ cnt += val.count; costTime += (val.endTime - val.beginTime)+val.costTime; } }) return {"count":cnt,beginTime:0,endTime:0,"costTime":costTime}; } var f =function (key,reduceResult){ //reduceResult.price =(reduceResult.beginTime).toFixed(2); if(reduceResult.count != 0 ){ reduceResult.avgCost =(reduceResult.costTime/reduceResult.count).toFixed(2); } return reduceResult; } //"url":{"$in":["/agent-fx-web/area/findManageAreas.do","/agent-fx-web/api/distributor/expectCommission.do"]}, var q = {"rt":{"$gt":ISODate("2017-10-10 07:00:25"),"$lt":ISODate("2017-10-10 07:30:25")}} db.runCommand({ mapreduce:"traceIndex", map:m, reduce:r, query:q, finalize:f, out:{merge:"test_map_reduce_4"} } )
第二种:注意totalCount += val.totalCount;
var m = function(){ emit(this.url,{"costTime":(this.rpt&&this.rt)?(this.rpt - this.rt):0,"totalCount":1}) } var r =function(key,values){ var totalCostTime = 0; var totalCount = 0; values.forEach(function(val){ //if(val.costTime > 0){ totalCount += val.totalCount; totalCostTime += val.costTime; //} //console.log(val); }) var result = {"costTime":totalCostTime,"totalCount":totalCount}; print(result); return result; } var f =function (key,reduceResult){ //reduceResult.price =(reduceResult.beginTime).toFixed(2); if(reduceResult.count != 0 ){ reduceResult.avgCost =(reduceResult.costTime/reduceResult.totalCount).toFixed(2); } // db.getCollection("test_map_reduce_5").update({ca:key},result,{upsert:true}); return reduceResult; } //"url":{"$in":["/agent-fx-web/area/findManageAreas.do","/agent-fx-web/api/distributor/expectCommission.do"]}, var q = {"rt":{"$gt":ISODate("2017-10-10 07:00:25"),"$lt":ISODate("2017-10-10 07:30:25")}} db.runCommand({ mapreduce:"traceIndex", map:m, reduce:r, query:q, finalize:f, out:{merge:"test_map_reduce_4"} } )
相关推荐
需要注意的是,MongoDB的MapReduce在某些情况下可能会分批处理数据,例如每100次reduce操作后重新处理,这可能导致数据处理的不一致性。在编写reduce函数时,必须考虑到这一点,如上述示例所示,通过将累计值存储在...
《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...
《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...
本篇文章将针对标题"MongoDB Books"中的三本书籍进行详细的知识点概述。 首先,"MongoDB实战"这本书通常会涵盖MongoDB的基础知识,包括安装与配置、数据模型设计、查询语言、索引创建、聚合框架以及备份与恢复策略...
MongoDBNotesForProfessionals_MongoDB_mongodbbook_zip.zip 是一个包含有关MongoDB专业应用的资料压缩包,很可能包含了深入的MongoDB知识和实战经验,适合已经对数据库有一定基础并希望深入学习MongoDB的开发者。...
这三本书籍将带你逐步探索大数据的世界,从数据的存储(Hadoop HDFS)、处理(MapReduce)到实时传输(Kafka)以及非结构化数据管理(MongoDB)。通过深入学习,你不仅可以理解大数据技术的基本原理,还能掌握实际...
在2021年的MongoDB中文社区杭州大会上,专家们分享了许多关于MongoDB的实战经验和深入技术点,以下是根据大会内容整理出的一些关键知识点: 1. **MongoDB的核心特性** - 文档型数据库:MongoDB存储数据为JSON格式...
在这个45讲的系列中,我们将深入探讨分布式系统的基石、设计模式以及实战应用,帮助你掌握分布式技术的核心知识。 1. **分布式系统基础**: - 分布式系统的定义:分布式系统是由多台独立的计算机通过网络互相连接...
参考教材和文献提供了丰富的学习资源,包括林子雨的《大数据技术原理与应用》、《大数据基础编程、实验和案例教程》、陆嘉恒的《实战》以及迪米达克和卡拉纳的《实战中文版》等,供学生深入学习和研究。 总的来说,...
书中会详细介绍Hadoop的安装配置、集群管理以及HDFS和MapReduce的工作原理。 二、大数据预处理 大数据分析前的预处理工作至关重要,包括数据清洗、数据转换、数据集成等步骤。数据清洗主要是处理缺失值、异常值和...
了解Hadoop技术的知识点包括HDFS的原理、MapReduce的原理、Hadoop的应用场景等。掌握Hadoop技术的程度:精通。 六、分布式数据库技术 分布式数据库技术是大数据存储的核心技术,掌握分布式数据库HBASE、Mongodb等...
在大数据处理领域,Hadoop、Spark和NoSQL都是至关重要的技术。这三者共同构建了现代数据处理的...通过学习和实践,你将能够更好地理解大数据处理的工作原理,提高数据处理的效率,并为应对大数据时代的挑战做好准备。
"大数据管理实验之三Hadoop基础命令与编程初步.docx"则深入到Hadoop的使用层面,包括HDFS的基本命令,如上传、下载、查看文件等,以及编写MapReduce程序的初步概念,如Mapper和Reducer的工作原理,以及使用Java API...
为了支持教学,推荐了多本教材和参考书,如林子雨的《大数据技术原理与应用》、《大数据基础编程、实验和案例教程》、《Hadoop实战》和《Spark权威指南》等,这些资源可以帮助学生深入理解和应用课程知识。...
3. 分布式计算模型:讲解MapReduce、Spark等分布式计算框架的工作原理,它们如何处理大规模数据处理任务,以及在实际应用中的优势和局限。 4. 分布式存储:介绍HDFS(Hadoop Distributed File System)、Cassandra...
大数据课程分类.pdf 大数据课程分类.pdf是一份详细的课程大纲,涵盖了大数据相关的各个方面,包括基础阶段、存储阶段、...此外,本课程还涵盖了大数据之Linux基础、云计算平台、Java企业级核心技术等方面的知识点。
在《云计算系统架构实战2》中,我们深入探讨了构建高效、可扩展的云计算环境所需的关键技术和组件。本文档由刘彬于2015年11月26日创立,旨在提供一个全面的实践指南,帮助读者理解云计算架构的核心元素。 首先,...
7. **实战经验**:书中包含大量实例和实战案例,帮助读者将理论知识应用于实际项目,提升解决大数据问题的能力。 8. **MongoDB**:虽然不是Hadoop的一部分,但MongoDB是另一种流行的大数据存储解决方案,特别是在...
2. **Hadoop实战**:教授Hadoop的安装配置、HDFS的使用、MapReduce编程模型以及YARN资源调度器的管理。 3. **Spark技术**:讲解Spark的架构原理,如何编写Spark程序,以及Spark SQL和Spark Streaming的使用。 4. *...
**3.1 MapReduce 工作原理** - **Map 阶段**:将输入数据分割成小块,每个块由 Map 函数处理,生成键值对。 - **Reduce 阶段**:对 Map 阶段产生的中间结果进行汇总,生成最终输出。 **3.2 MapReduce 优势** - **...