MongoDB的MapReduce使用
参考文章
?
?
http://www.mongodb.org/display/DOCS/MapReduce
http://www.rainsts.net/article.asp?id=1044
https://github.com/mongodb/mongo-java-driver/commit/fa003adc5db8a6c4efe0279c74973af15d99e6ed#diff-2
?
?
MapReduce是一个编程模型,封装了并行计算、容错、数据分布、负载均衡等细节问题。
输入是一个key-value对的集合,中间输出也是key-value对的集合,用户使用两个函数:Map和Reduce。
?
在使用MongoDb的mapreduce功能时,我找Java代码找半天,结果练了半天的Javascript代码。
MongoDb是通过解析“Javascript”代码来计算的。所有我们先用Javascript代码调通,再使用Java代码拼接使用这个MapReduce功能。
?
?
??
?
?
我使用上一篇文章插入数据?http://xiaofancn.iteye.com/blog/1163200
?
讲讲我们要实现的功能,就是按照名字name统计记录个数。
?
?
?
??
?
?
?
好了,会使用Javascript,使用Java就是拼接我们的Javascript代码了。
?
?
public void MapReduce() {DBCollection personColl = mongoOperations.getCollection(mongoOperations.getCollectionName(Person.class));String map = "function() { emit(this.name, {count:1});}";String reduce = "function(key, values) {";reduce=reduce+"var total = 0;";reduce=reduce+"for(var i=0;i<values.length;i++){total += values[i].count;}";reduce=reduce+"return {count:total};}";String result = "resultCollection";MapReduceOutput mapReduceOutput = personColl.mapReduce(map,reduce.toString(), result, null);DBCollection resultColl = mapReduceOutput.getOutputCollection();DBCursor cursor= resultColl.find();while (cursor.hasNext()) {System.out.println(cursor.next());}}??
?
1 楼 violetluna 2011-12-31 不过,明白了