MapReduce在蒙古数据库和数据类型分析中的应用
类型:编程控件大小:191KB语言:中文评分:6.6标签:立即下载。本文主要介绍MapReduce在MongoDB上的使用。它类似于sql的分组和聚合,即先按map分组,然后使用reduce统计,最后可选地使用finalize来调整最终结果。好的,我来介绍一下,我用的版本是mongodb2.4.5,然后我还用了MongoVUE(一个非常好的图形化mongodb管理工具)来帮我配合。
1、原始数据,集合中有三个单据需要使用:
它们的数据格式是:
可能很多人不关注mongodb中存储的数据格式,但对我来说,这是非常敏感的,我不喜欢在后台使用object来保存这些清晰的类型。在这里,我想再提一点。如果使用控制台插入的数据,则插入的数字可能会保存为Double,但如果要保存为整数,则必须使用NumberInt()和NumberLong()。示例:
运行后,您在控制台上看不到数据类型,但是使用MongoVUE,我可以看到:
数据库直接保存为双精度值。并使用:
您可以将其保存为int32,并使用NumberLong()将其保存为Int64。
2.进行MapReduce,找出有多少人有不同的名字。首先是map函数,然后调用reduce函数
1函数Map() {2 emit(3 this.name,4 { count : 1 } 5);6 }emit(key,value)是一个分组函数,表示将原单据按指定的键进行分组,value是从单据中取出或自己输入的数据,将被添加到一个集合中(暂称C集合)。MapReduce将为每个文档调用一个Map函数,但是您可以决定是否使用emit函数对文档进行分组。未分组的文档将被丢弃。但是,我建议不要在Map函数中添加过滤操作,比如if (xxx==yyy) emit(.);相反,查询应该在MapReduce之前执行,以过滤掉信息(这将在后面描述)。可以在Map函数中执行的过滤操作一般都是分类操作,比如分数高于60的以某种方式发出,分数低于60的以某种方式发出,分数高于60的不应该发出,否则什么都不会做。
1函数Reduce(键,值){ 2 var reduced={ count:0,name : ' ' };//初始化返回值3 values . foreach(function(val){ 4 reduced . count=val . count;5 });6回报减少;7}接下来是Reduce函数,根据上面的emit分组数据进行计数。该函数的参数是key(它是上面emit中的键)和值(它是上面提到的c集合)。MapReduce为每个分组的键调用一个Reduce函数。函数的第一行是初始化需要的统计结果数据,然后是自己的统计方法,最后需要返回这个结果。
好,让我们看看如何在数据库控制台下调用这个MapReduce:
1 db . run command({ MapReduce : ' lekko ',2 Map : function Map(){ 3 emit(4 this . name,5 { count : 1 } 6);7 }、8 reduce :函数Reduce(key,values){ 9 var Reduce={ count :0,name : ' ' };//初始化返回值10 values . foreach(function(val){ 11 reduced . count=val . count;12 });13回报减少;14 }、15 out : {内嵌: 1 } 16 });结果很快就出来了:
因为我之前在控制台下加了两个DOCs,现在有四个人叫lekko。值得注意的是,这里MapReduce后的所有结果都会翻倍!
3.一些附加操作
MapReduce的简单原理很简单,关键是灵活运用。现在我将举一些我自己经历的例子:
(1)将查询放入MapReduce中
向先前的运行命令添加参数。例如,如果我想查询所有男生,添加.查询: {'isman' : true},
(2)数据类型转换的结果
使用Finalize函数(该函数在Reduce函数之后调用,它将对所有键的Reduce结果执行最终操作)。例如,在后台调用api后,我想获取int数据而不是double数据,因此可以添加Finalize函数:
一.2 finalize :函数Finalize(key,reduced){ 3 reduced . count=NumberInt(reduced . count);4回报减少;5 },6 .这样,减少的输出将是int32,可以直接在后台使用强制转换,而不是从object转换为double再转换为int(最好在ToString之后使用Prase)。
(3)时间类型
因为mongodb有Date类型,但是因为存储的时间格式和查询的时间格式可能不一致(特别是当你的mongodb部署在远程位置,多人协同开发的时候),会导致根据时间条件找不到数据的问题。我的建议是直接保存时间的长形式(过去的秒),那么这个差异问题就不再存在了。
版权声明:MapReduce在蒙古数据库和数据类型分析中的应用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。