在mongodb中一般的统计使用group就够了,但是针对大数据量group远远不够,这时使用自带的mapreduce统计不失为一个
好方法。当然也可以配置hadoop,结合hadoop使用更好。
mongodb中主要使用集合中的mapReduce方法来调用用js函数编写好的Map和reduce。
对于程序来说这里主要就是JS的编写了。既可以直接如下嵌入到代码中也可以把单独的js函数拿出来,再在java代码中加载
@Test
public void testMapReduce(){//插入测试数据
Mongo _db = new Mongo( "127.0.0.1" ).getDB( "jmrtest" );
DBCollection c = _db.getCollection( "jmr" );
c.drop();
c.save( new BasicDBObject( "x" , new String[]{ "a" , "b" } ) );
c.save( new BasicDBObject( "x" , new String[]{ "b" , "c" } ) );
c.save( new BasicDBObject( "x" , new String[]{ "c" , "d" } ) );
MapReduceOutput out =
c.mapReduce( "function(){ " +
"for( var i=0; i<this.x.length; i++ )" +
"{ emit(this.x[i] , 1 ); } }",//map函数内使用this来操作当前行表示的对象,并且使用emit(key,value)方法来向reduce提供参数:
"function(key,values){" +
" var sum=0; " +
"for( var i=0; i<values.length; i++ )" +
" sum += values[i];" +
" return sum;}" ,//reduce的key就是emit(key,value)的key,value_array是同个key对应的多个value数组:
"result" , null );//mapReduce 方法2.x以后和1.X不同
Map<String,Integer> m = new HashMap<String,Integer>();
for (DBObject element : out.results()) {
System.out.println(element.get("value"));
}
for ( DBObject r : out.results() ){
System.out.println( ((Number)(r.get( "value" ))).intValue());
m.put( r.get( "_id" ).toString() , ((Number)(r.get( "value" ))).intValue() );
}
System.out.println(m.size());
assertEquals( 4 , m.size() );
assertEquals( 1 , m.get( "a" ).intValue() );
assertEquals( 2 , m.get( "b" ).intValue() );
assertEquals( 2 , m.get( "c" ).intValue() );
assertEquals( 1 , m.get( "d" ).intValue() );
}
分享到:
相关推荐
MapReduce在MongoDB中的应用非常适合于大数据分析、聚合操作和复杂统计。例如,你可以使用MapReduce来计算用户行为的汇总信息,进行分类或聚类分析,或者在大型日志文件中提取有价值的信息。然而,需要注意的是,...
计算机后端-PHP视频教程. mongodb10 MapReduce 统计栏目下的商品.wmv
在 MongoDB 中,MapReduce 功能可以用来进行数据聚合、统计分析以及创建索引等任务。 1. **Map 函数**: - Map 函数由用户自定义,用于遍历输入文档,提取关键信息,并生成中间键值对。例如,你可以用它来统计网站...
在MongoDB中,MapReduce的命令执行方式如下: ```javascript db.collection.mapReduce( function() {emit(key, value);}, // Map函数 function(key, values) {return reduceFunction}, // Reduce函数 { out: ...
在MongoDB中,MapReduce主要用于执行复杂的数据聚合操作,可以将数据从输入源映射为中间键值对,然后对所有的具有相同键的值进行规约操作。通过单词计数的实例,我们可以理解MongoDB中MapReduce编程模型的使用方式和...
在订单统计中,我们需要将同一天的所有订单金额和商品数量求和。所以,reduce函数会这样写: ```javascript function reduce(key, values) { var result = { totalAmount: 0, itemCount: 0 }; values.forEach...
在这个过程中,MongoDB首先应用Map函数遍历数据集,生成中间键值对;然后,Reduce函数对这些键值对进行聚合,最终生成所需的结果。 Map函数是MapReduce过程的第一步,它的主要任务是将原始数据转化为键值对。在...
在MongoDB中,可以使用`use`命令切换到特定的数据库,如`xsgl`,然后使用`insert`方法批量添加数据到`member`集合。例如,创建一个包含学生信息的文档并插入数据。 2. 查询操作: `find`方法用于查找集合中的数据...
在MongoDB中,MapReduce可用于复杂的聚合操作,包括自定义的聚合逻辑,但它的使用相对复杂,通常用于更高级的场景。 除了这些简单的聚合函数外,MongoDB还提供了一个更强大的聚合框架——`aggregate`方法,它允许...
10. 应用集成:源码可能包含了与多种编程语言(如Python、Java、Node.js等)集成的例子,展示了如何在实际项目中使用MongoDB驱动程序。 通过阅读和实践这些源码,读者能够加深对MongoDB工作原理的理解,掌握在实际...
Mongodb是主流的NOSQL数据库之一,Mongodb最佳实践,详细介绍了Mongodb使用以及底层原理...通过这些学习对Mongodb全方位的学习和理解,适应企业多元化数据库的需要,现在很多企业都在使用Mongodb,像360,百度,京东等
对于Java开发者来说,MongoDB提供了一个强大的Java驱动程序,使得在Java应用程序中集成MongoDB变得简单易行。《MongoDB for Java Developers》这本书正是针对这一主题,帮助开发者深入理解和使用MongoDB与Java的结合...
在代码中,读者将了解如何使用MongoDB的API或Pentaho的MongoDB连接器来交互数据。这可能包括增删改查(CRUD)操作、集合管理、文档结构设计以及索引的创建和优化。 3. **数据分析与报表设计**: Chapter 4可能深入到...
此外,还可以使用MapReduce或聚合框架进行更复杂的统计分析,如计算不同类别的错误发生频率,或者找出最常日志的组件。 通过结合Log4j和MongoDB,我们能够构建一个高效、可扩展的日志管理系统,不仅能够实时记录...
手册将阐述MapReduce的概念,以及如何在MongoDB中编写和执行MapReduce作业。 8. **安全与认证**:理解如何确保MongoDB实例的安全性至关重要。手册会涉及用户权限、角色、SSL连接、认证机制等内容,帮助你构建安全的...