1、项目结构如下:
2、MapReduce.java源码:
/**2016年1月5日
*auther:lida
*testMongoMR
*testMongoMR
*MapReduce.java
* */
package testMongoMR;
import java.net.UnknownHostException;
import java.util.Map;
import java.util.Set;
import org.bson.BSONObject;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand;
import com.mongodb.MapReduceOutput;
import com.mongodb.MongoClient;
/**
* @author lida
*
*/
public class MapReduce {
public static void main(String[] args) {
// 连接数据库
MongoClient mongoClient = null;
mongoClient = new MongoClient("localhost", 27017);
// 如果没有该数据库,那么就创建一个
DB db = mongoClient.getDB("ph51_dcp");
// 获取集合,如果没有该集合,那么就创建一个
DBCollection dbCollection = db.getCollection("ph51_dcp_user");
// map函数
String map = "function () {" + "emit('ph51_dcp_user中的user数为', {count:1});" + "}";
// reduce 函数
String reduce = "function(key, values) {" +
" total = 0;" +
" for (var i in values) {" +
" total += values[i].count;" +
"}" +
"return {"
+ "count: total" +
"}" +
"}";
// 按指定的条件进行MR,统计name为“222222”的用户数
BasicDBObject query = new BasicDBObject();
query.put("name", "222222");
// 执行map、reduce函数
MapReduceCommand cmd = new MapReduceCommand(dbCollection, map, reduce,
"out_user", MapReduceCommand.OutputType.REPLACE, query); //out_user是指定的输出数据的集合
MapReduceOutput out = dbCollection.mapReduce(cmd);
for (DBObject o : out.results()) {
System.out.println(o.toString());
}
System.out.println("MapReduce执行完毕!");
}