有了昨天的順利,今天就更有信心了,今天要做的是取得區間記錄數,為前台統計圖表準備資料,舉例來說效果就是,
在1天內出現了XX次,在2天內出現了XX次,在3天內出現了XX次 (不包括上一區間的資料)
分析了一下,可以在昨天的第二個步驟獲得的資料進行操作(ttt_date_out表,資料內容形如{ID:1,Times:[1,2,3,....]}),Map和Reduce也和昨天的類似 編寫Map
function Map() {var times = this.value.times;if(times){if(times.length > 1){for(var i = 0;i < times.length;i++){if(i != times.length - 1){var between_time = times[i] - times[i+1];// 向上取整,1.4,1,7都會變成2,意思表示為“兩天內”var day = Math.ceil(between_time / (1000 * 60 * 60 * 24));emit(day, 1); }}}}}
編寫Reduce
function Reduce(key, values) {var reduced = {key:key, count:0};values.forEach(function(val) {reduced.count++; });return reduced;}
得到結果,達到預期,但還是不太理想,對於只有一次map的資料和多次map的資料,結果表示有點不一樣
公司上不了Google,就只能問度娘了,無解,自己來吧,想到了昨天用到的Finalize 編寫Finalize
function Finalize(key, reduced) {if(reduced.count){return reduced.count;}else{return reduced;}}
浪費了一些時間,不過船小好調頭,例子小好瞎試,最終效果