记一次MongoDB Map&Reduce入门操作
需求说明
用Map&Reduce计算几个班级中,每个班级10岁和20岁之间学生的数量:
需求分析
学生表的字段:
db.students.insert({classid:1, age:14, name:'Tom'})
将classid随机1和2、age在8-25岁之间随机,name在3-7个字符之间随机。
数据写入
数据写入java脚本
往mrtask库中students写入1000万条数据:
package org.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
public class TestMongoDBReplSet {
public static void main(String[] args) {
try {
List<ServerAddress> addresses = new ArrayList<ServerAddress>();
ServerAddress address1 = new ServerAddress("172.16.16.89", 27017);
addresses.add(address1);
MongoClient client = new MongoClient(addresses);
DB db = client.getDB("mrtask");
DBCollection coll = db.getCollection("students");
// 数据写入
BasicDBObject object = new BasicDBObject();
for (int i = 1; i <= 10000000; i++) {
object.append("classid", 1 + (int) (Math.random() * 2));
object.append("age", 8 + (int) (Math.random() * 17));
object.append("name", getName());
coll.insert(object);
object.clear();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getName() {
ArrayList list = new ArrayList();
for (char c = 'a'; c <= 'z'; c++) {
list.add(c);
}
String str = "";
int end = 3 + (int) (Math.random() * 4);
for (int i = 0; i < end; i++) {
int num = (int) (Math.random() * 26);
str = str + list.get(num);
}
return str;
}
}
查看数据写入
经查看,mrtask库中students表中有1000万条的数据:
[root@localhost bin]# ./mongo
MongoDB shell version: 2.6.11
connecting to: test
> show dbs
admin (empty)
local 0.078GB
mrtask 3.952GB
test 0.453GB
> use mrtask
switched to db mrtask
> db.students.find().count()
10000000
Map&Reduce计算
Map计算
> mapfun = function(){emit(this.classid,1)}
Reduce计算
> reducefun=function (key, values) { var count = 0; values.forEach(function (v) {count += v;}); return count; }
> ff = function (key, value) { return {classid:key, count:value}; }
Result输出
> classid_res = db.runCommand({
mapreduce:"students",
map:mapfun,
reduce:reducefun,
out:"students_classid_res",
finalize:ff,
query:{age:{$gt:10,$lt:20}}
});
计算结果
> db.students_classid_res.find()
{ "_id" : 1, "value" : { "classid" : 1, "count" : 2643128 } }
{ "_id" : 2, "value" : { "classid" : 2, "count" : 2650870 } }
记一次MongoDB Map&Reduce入门操作的更多相关文章
- MongoDB Map Reduce(转载)
MongoDB Map Reduce Map-Reduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE). MongoDB提供的Map ...
- mongodb Map/reduce测试代码
private void AccountInfo() { ls.Clear(); DateTime dt = DateTime.Now.Date; IMongoQuery query = Query& ...
- MongoDB Map Reduce
介绍 Map-Reduce是一种计算模型,简单的说就是将大批量的工作分解(MAP)执行,然后再将结果合并成最终结果(REDUCE). MongoDB提供的Map-Reduce非常灵活,对于大规模数据分 ...
- 003-Tuple、Array、Map与文件操作入门实战
003-Tuple.Array.Map与文件操作入门实战 Tuple 各个元素可以类型不同 注意索引的方式 下标从1开始 灵活 Array 注意for循环的until用法 数组的索引方式 上面的for ...
- 入门大数据---Map/Reduce,Yarn是什么?
简单概括:Map/Reduce是分布式离线处理的一个框架. Yarn是Map/Reduce中的一个资源管理器. 一.图形说明下Map/Reduce结构: 官方示意图: 另外还可以参考这个: 流程介绍: ...
- 【MongoDB初识】-其他操作
又发现一种查询写法$wheredb.class.find({$}}) 排重db.class.distinct("stuCount") 一.MapReduce(摘录MongoDB实战 ...
- [转]MongoDB学习 C#驱动操作MongoDB
下载驱动 驱动的下载有两种方式:一种是在C#项目中通过NuGet进行安装,另一种是通过下面的链接:https://github.com/mongodb/mongo-csharp-driver/rele ...
- MongoDB学习笔记——聚合操作之MapReduce
MapReduce MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,value) ...
- MongoDB之三(高级操作 聚合、游标)
一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...
随机推荐
- 框架SpringMVC笔记系列 一 基础
主题:SpringMVC 学习资料参考网址: 1.http://www.icoolxue.com 2.http://aokunsang.iteye.com/blog/1279322 1.SpringM ...
- Scalaz(49)- scalaz-stream: 深入了解-Sink/Channel
一个完整的scalaz-stream有以下几个部分组成:Source -> Transducer -> Sink,用直白文字来描述就是:“输入 -> 传换 -> 输出”.我们已 ...
- 20款美化网站的 jQuery Lightbox 灯箱插件
jQuery Lightbox 灯箱插件可以让你为您的网站和应用程序展示优雅的图像,视频 和其它内容(使用模式窗口).如果你是一个开发人员,你必须拥有 jQuery 灯箱插件集合,因为有一部分的客户会 ...
- Page Scroll Effects - 简单的页面滚动效果
Codyhouse 收集了一组页面滚动效果,就是目前大家很常见的用户在浏览网页的时候.一些效果虽然极端,但如果你的目标是创建一个身临其境的用户体验,他们是非常有用的.所有的动画都使用 Velocity ...
- JS Nice – JavaScript 代码美化和格式化工具
JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ...
- CSS3颜色特征温故
网页是色彩的表现原理:显示器是由一个个像素构成,利用电子束来表现色彩.像素把光的三原色:红色(R).绿色(G).蓝色(B)组合成的色彩按照科学原理表现出来.一个像素包含8位元色彩的信息量,又从0 ~ ...
- SharePoint 2013 日历根据Category显示不同颜色
最近有一个小需求,就是SharePoint的日历类型列表,用户希望根据Event里面的Category不同,在前台视图显示成不同的颜色,绞尽脑汁,想到这么个办法,分享给大家,希望有更好方法的也能留言推 ...
- JavaScriptSerializer序列化时间处理
JavaScriptSerializer序列化时间后会把时间序列化成N进制的鬼数据,于是查了下质料坐下记录 假设list = News List<Text>(){new Text(){id ...
- [Android]使用RecyclerView替代ListView(三)
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4268097.html 这次来使用RecyclerView实现Pinn ...
- Android 第一个程序 及 环境搭配
一. JDK配置 1.找到jdk安装路径 2.配置环境变量(建议配置在系统变量里面) 1).配置JAVA_HOME变量 2).配置 CLASSPATH 环境变量 CLASSPATH=.;%JAVA_H ...