您的位置:首页 > 其它

Map-Reduce

2016-12-08 19:55 232 查看
map-reduce

参数说明:

mapreduce: 要操作的目标集合。

map: 映射函数 (生成键值对序列,作为 reduce 函数参数)。

reduce: 统计函数。

query: 目标记录过滤。

sort: 目标记录排序。

limit: 限制目标记录数量。

out: 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。

keeptemp: 是否保留临时集合。

finalize: 最终处理函数 (对 reduce 返回结果进行最终整理后存入结果集合)。

scope: 向 map、reduce、finalize 导入外部变量。

verbose: 显示详细的时间统计信息

mongoVUE:

计算一个省份里面两个城市的最短距离:

{

mapreduce: cities,
map : function Map() {
var key = this.CountryID;
emit(key, {		//按省份ID进行分组
"data":[
{	//需要获取的值
"name" : this.City,

					//横纵坐标
"lat" : this.Latitude,
"lon" : this.Longitude
}
]});
}
reduce : function Reduce(key, values) {
var reduced = {"data":[]};
for (var i in values) {
var inter = values[i];
for (var j in inter.data) {
reduced.data.push(inter.data[j]);
}
}
return reduced;
}

finalize : function Finalize(key, reduced) {
if (reduced.data.length == 1) {
return {"message" : "This Country contains only 1 City" };
}
var min_dist = 999999999999;
var city1 = {"name": "" };
var city2 = {"name": "" };
var c1;
var c2;
var d;
for (var i in reduced.data) {
for (var j in reduced.data) {
if (i>=j) continue;
c1 = reduced.data[i];
c2 = reduced.data[j];
d = Math.sqrt((c1.lat-c2.lat)*(c1.lat-c2.lat)+(c1.lon-c2.lon)*(c1.lon-c2.lon));
if (d < min_dist && d > 0) {
min_dist = d;
city1 = c1;
city2 = c2;
}
}
}
return {"city1": city1.name, "city2": city2.name, "dist": min_dist};
}

 //前置条件
query : {"CountryID" : {"$ne" : 254 } }
out : {inline : 1 }
});

JAVA代码实现:

MapReduceOptions mapReduceOptions = new MapReduceOptions();
mapReduceOptions.finalizeFunction(finalizeFunction)
mapReduceOptions.limit(limit)
mongoTemplate.mapReduce(inputCollectionName, mapFunction, reduceFunction, mapReduceOptions, entityClass)



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: