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的基础概念到高级特性。在书中,你...
《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...
本篇文章将针对标题"MongoDB Books"中的三本书籍进行详细的知识点概述。 首先,"MongoDB实战"这本书通常会涵盖MongoDB的基础知识,包括安装与配置、数据模型设计、查询语言、索引创建、聚合框架以及备份与恢复策略...
MongoDBNotesForProfessionals_MongoDB_mongodbbook_zip.zip 是一个包含有关MongoDB专业应用的资料压缩包,很可能包含了深入的MongoDB知识和实战经验,适合已经对数据库有一定基础并希望深入学习MongoDB的开发者。...
通过《MongoDB权威指南》,读者不仅可以获得扎实的理论知识,还能通过丰富的实例和实战经验,提升MongoDB的实际操作能力。无论是初学者还是经验丰富的开发者,都能从中受益匪浅,更好地利用MongoDB解决实际项目中的...
- MapReduce:了解如何使用MongoDB的MapReduce功能进行大数据处理和分析。 3. **性能优化** - 索引:学习创建和管理索引,理解不同类型的索引(如单键、复合、地理空间和文本索引)以及它们对查询性能的影响。 -...
这三本书籍将带你逐步探索大数据的世界,从数据的存储(Hadoop HDFS)、处理(MapReduce)到实时传输(Kafka)以及非结构化数据管理(MongoDB)。通过深入学习,你不仅可以理解大数据技术的基本原理,还能掌握实际...
在2021年的MongoDB中文社区杭州大会上,专家们分享了许多关于MongoDB的实战经验和深入技术点,以下是根据大会内容整理出的一些关键知识点: 1. **MongoDB的核心特性** - 文档型数据库:MongoDB存储数据为JSON格式...
在这个45讲的系列中,我们将深入探讨分布式系统的基石、设计模式以及实战应用,帮助你掌握分布式技术的核心知识。 1. **分布式系统基础**: - 分布式系统的定义:分布式系统是由多台独立的计算机通过网络互相连接...
参考教材和文献提供了丰富的学习资源,包括林子雨的《大数据技术原理与应用》、《大数据基础编程、实验和案例教程》、陆嘉恒的《实战》以及迪米达克和卡拉纳的《实战中文版》等,供学生深入学习和研究。 总的来说,...
书中会详细介绍Hadoop的安装配置、集群管理以及HDFS和MapReduce的工作原理。 二、大数据预处理 大数据分析前的预处理工作至关重要,包括数据清洗、数据转换、数据集成等步骤。数据清洗主要是处理缺失值、异常值和...
了解Hadoop技术的知识点包括HDFS的原理、MapReduce的原理、Hadoop的应用场景等。掌握Hadoop技术的程度:精通。 六、分布式数据库技术 分布式数据库技术是大数据存储的核心技术,掌握分布式数据库HBASE、Mongodb等...
5. **MapReduce实战**(第8章): - 自定义InputFormat和OutputFormat:根据实际需求定制数据输入输出格式。 - 分析日志数据:使用MapReduce处理大量服务器日志,提取有价值信息。 - 处理复杂数据结构:例如XML或...
在大数据处理领域,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企业级核心技术等方面的知识点。