時(shí)間:2024-03-08 08:50作者:下載吧人氣:21
前言
玩過(guò)Hadoop的小伙伴對(duì)MapReduce應(yīng)該不陌生,MapReduce的強(qiáng)大且靈活,它可以將一個(gè)大問(wèn)題拆分為多個(gè)小問(wèn)題,將各個(gè)小問(wèn)題發(fā)送到不同的機(jī)器上去處理,所有的機(jī)器都完成計(jì)算后,再將計(jì)算結(jié)果合并為一個(gè)完整的解決方案,這就是所謂的分布式計(jì)算。本文我們就來(lái)看看MongoDB中MapReduce的使用。
打算用mongodb mapreduce之前一定要知道的事!!!
mapreduce其實(shí)是分批處理數(shù)據(jù)的,每一百次重新reduce處理,所以到reduce里的數(shù)據(jù)如果是101條,那就會(huì)分2次進(jìn)入。
這導(dǎo)致的問(wèn)題就是在reduce中 如果 初始化 var count = 0;
在循環(huán)中 count ++,最后輸出的是1???
避免都方法是,把數(shù)據(jù)存在返回的value里,這個(gè)value是會(huì)在循環(huán)進(jìn)入reduce的時(shí)候重用的。在循環(huán)中 count += value.count
就能把之前都100加上了!!!
還有如果只有一條數(shù)據(jù),那它不會(huì)進(jìn)入reduce,會(huì)直接返回。
下面是具體例子:
string map = @" function() { var view = this; emit(view.activity, {pv: 1}); }"; string reduce = @" function(key, values) { var result = {pv: 0}; values.forEach(function(value){ result.pv += value.pv; }); return result; }"; string finalize = @" function(key, value){ return value; }";
盖楼回复X
(您的评论需要经过审核才能显示)
網(wǎng)友評(píng)論