您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
mongodb-mapReduce实战地震数据分析
发布时间:2017-11-22 18:39:32编辑:雪饮阅读()
建立集群(复制集+分片)
108:复制集1
120:复制集2
121:config+mongodbs
分片规则:
sh.enableSharding('test')
sh.shardCollection('test.dz',{sn:1})
for(var i=3;i<=50;i++){
sh.splitAt('test.dz',{sn:i*1000})
}
导数据
注意:导入数据时要用mongos建立时的端口
另外这里导入的数据xls量是6M左右的,老师用的那个数据文件就是6M多的数据,数据大了,效果明显,我费尽办法也只是在百度文库中找到了4M多的,老师去下载数据的那个网站我也去了,可是下载的起止日期都一样,但数据大小才不到1M。
xls转换成csv后数据会变的更小,我这个4M的数据转成xsv数据后就只有2M多了。
另外如果你自己找的数据务必格式结构和此数据相同,且以utf-8存储
在mongos所在服务器中将csv导入
./bin/mongoimport -h 192.168.101.108 --port 27017 -d test -c dz --type csv --headerline --file /usr/local/mongodb/test.csv
注意:该命令可能会无端错误,错误可能发生在
查询导入数据
db.getCollection("dz").find({})
准备聚合运算
仅统计国内的,所以将经度或纬度小于0的都排除,
每5度一个单元"var j=Math.floor(this.jing/5)*5; var w=Math.floor(this.wei/5)*5;"
下面的block相当于每个分组(这里是每5度一个分组)
map里面的emit不断将每个满足其对应block的数据添加到对应的block中
emit规整完所有block后的新的全部的block交给mapReduce
让mapReduce将最后的每个block逐个统计统计各自的组数据。
var map=function(){
if(this.jing < 0 || this.wei < 0 ){
return;
}
var j=Math.floor(this.jing/5)*5;
var w=Math.floor(this.wei/5)*5;
var block=j+':'+w;
emit(block,1);
}
var reduce=function(block,values){
return Array.sum(values);
}
db.dz.mapReduce(map,reduce,{out:'res'});
db.res.find()
统计地震强度
var map=function(){
if(this.jing < 0 || this.wei < 0 ){
return;
}
var j=Math.floor(this.jing/5)*5;
var w=Math.floor(this.wei/5)*5;
var block=j+':'+w;
emit(block,this.lev);
}
var reduce=function(block,values){
return Array.avg(values);
}
db.dz.mapReduce(map,reduce,{out:'res'});
db.res.find()
倒序排列
db.res.find().sort({value:-1})
关键字词:mongodb,mapReduce
上一篇:memcached
相关文章
-
无相关信息