- 有了昨天的顺利,今天就更有信心了,今天要做的是取得区间记录数,为前台统计图表准备数据,举例来说效果就是,
在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的数据,结果表示有点不一样
- 公司上不了谷歌,就只能问度娘了,无解,自己来吧,想到了昨天用到的Finalize
- 编写Finalize
function Finalize(key, reduced) { if(reduced.count){ return reduced.count; }else{ return reduced; } }
- 浪费了一些时间,不过船小好调头,例子小好瞎试,最终效果