MapReduce的用法

MapReduce是聚合工具中的明星,count,distinct,group能做的事情,MapReduce都可以完成,它是一个可以轻松并行化到多个服务器的聚合方法.简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。

 

1persons集合里面有如下数据,用MapReduce计算出每个国家的人数

map=function(){

          emit( this.country,{count: 1} ) ;

 }

 

 

reduce = function( key , values ){...

    var total = {count: 0}

      for ( var i=0; i<values.length; i++ )

         total.count += values[i].count; 

     return { count : total };

 

};

 

 

 

查询结果:

 

用java操作MapReduce

public static void main(String[]args){

  MongoDb db=new MongoDb("foobar");

  String map = "function() { emit(this.country, {count:1});}";
  String reduce = "function Reduce(key, values) {var total = {count:0}; for ( var i=0; i<values.length; i++ ) total.count += values[i].count;  ;return total;}";
  MapReduceOutput mop = db.mapReduce("persons", map, reduce, null,
    MapReduceCommand.OutputType.INLINE, null);
  Iterable<DBObject> itr = mop.results();
  long lCount = 0;
  for (DBObject dbObject : itr) {
   String _id = dbObject.get("_id").toString();
   Double dble = (Double) ((DBObject) dbObject.get("value"))
     .get("count");
   lCount = dble.longValue();
   System.out.println(_id + "  " + lCount);
  }

}

public   MapReduceOutput mapReduce(String collName,String map, String reduce,
  String outputTarget, OutputType outputType, DBObject queryObj) {
  DBCollection collection=db.getCollection(collName);
 return collection.mapReduce(map,reduce, null, MapReduceCommand.OutputType.INLINE, queryObj);
}

 

查询结果如下:

American  2
China  5
Korea  1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值