Zi 字媒體
2017-07-25T20:27:27+00:00
此篇文章瀏覽量:
282
基本概念
對映(map)
歸納(reduce)
定型(finalize,這是 option)
主要是以下步驟:
執行前處理:在執行 MapReduce 前,先對集合內的資料進行篩選或排序的處理。
執行 Map 函式:Map 函式主要的功能是定義分群規則與分群後的資料內容。
執行 Reduce 函式:Reduce 函式主要的功能是合併群組內的資料。
設定輸出位置。
mapReduce 執行結果。
mapReduce() 的語法如下:
db.collection.mapReduce(
, // 對映(map)函式
, // 歸納(reduce)函式
// options 以下為可輸入的參數
{
out: , // 要輸出的集合名稱
query: , // 查詢式
sort: , // 排序
limit: , // 限制資料數量
finalize: , // 定型(finalize)函式
scope: , // 全域變數可以被 map、reduce、finalize 函式存取
jsMode: , // 將 map 與 reduce 傳遞的資料使用 JavaScript 的 objects
verbose: , // 是否包含處理時間的資訊
}
)
也可以將 mapReduce 結果 results 不輸出至集合來直接顯示,透過在 mapReduce 的 outline 改輸入為 out: {inline: 1} 即可。
範例:計算來自台北市各個行政區之消費者的總人數與平均年齡
var fnmap = function(){
emit(
this.district,
{count: 1, age: this.age}
)
}
var fnreduced = function(key, values){
var reduced = {count: 0, age: 0}
for(var idx = 0; idx < values.length; idx++){
var val = values[idx]
reduced.age += val.age
reduced.count += val.count
}
return reduced
}
var fnfinalized = function(key, reduced){
reduced.avgAge = reduced.age / reduced.count;
return reduced
}
db.getCollection('customers').mapReduce(
fnmap,
fnreduced,
{
query: {city: '台北市'},
finalize: fnfinalized,
out: {inline: 1}
}
)
若覺得文章有幫助,請多分享,讓其他同好也能吸收網站技能知識。
Tweet
寫了
5860316篇文章,獲得
23313次喜歡