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: 要操作的目标集合。
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)
相关文章推荐
- 为github帐号添加SSH keys
- 【Dongle】【Java】从字符串中获得二维数组
- OpenCV学习笔记(五):OpenCV2.4.13+VS2013的配置(非本机使用)
- EventBus粘性事件
- 跳跃表(skiplist)实现及简单分析
- mongodb数组和嵌入文档操作
- iPhone6爆炸真是小概率事件吗?
- 南邮微机实验(基于中断的动态显示)
- Express jade
- 阶乘函数
- LA 3041 Colored Cubes (暴力枚举+贪心)
- 实验11——指针的基础应用
- roundcube
- 【C++学习】【阶段一】数据初始化&运算符优先级&条件循环语句
- VS2013/MFC编程入门之三十七(文档、视图和框架:各对象之间的关系)
- 剑指offer——面试题39:二叉树的深度
- 【Caffe】Ubuntu安装Protobuf2.5
- STM32学习2
- quartz (从原理到应用)详解篇
- 并查集找亲戚