论坛首页 Web前端技术论坛

Map/Reduce-javascript版

浏览 1922 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-07   最后修改:2009-06-07
/**
 * URL访问频率统计
 * map函数 处理webpag请求和应答(URL,1)的log。
 * Reduce函数 把所有相同的URL的值合并,并且输出一个成对的(URL,总个数)。 
 * 参考:http://labs.google.com/papers/mapreduce.html
 */
var mapReduceJob = {
   map:function(/*Array*/lines){
		var map_result = [];
		lines.each(function(line){
		    var url = line.match(/GET \S+.html HTTP/);//仅简单匹配html类型链接
			if(url)){
				map_result.push([url[0],1]);
			}
		});
		return map_result;
   },
   reduce:function(/*Array*/map_result){
		var reduce_result={};
		map_result.each(function(/*Array*/pair){
			reduce_result[pair[0]] ||= 0;
			reduce_result[pair[0]] += pair[1];
		});
		return reduce_result;
   },
   run:function(){
		var xhr = new XMLHTTPRequest();
        var me = this; 
		xhr.onreadystatechange = function(){
			if (xhr.readyState == 4){
				var data = xhr.responseText.split("\n");
				var map_result =  me.map(data);
				var reduce_result = me.reduce(map_result);
                console.log(reduce_result );
			}
		}
		xhr.Open("get", "http://test.com/log/log-2009-6-7.log", true);
		xhr.send(null);
   }
};
mapReduceJob.run();

   发表时间:2009-06-07  
高手,写的都是伪码啊,呵呵
reduce_result[1]  ||=0

这个是语法错误呢。

开始我还已为真能这么写,上当了。
0 请登录后投票
   发表时间:2009-06-08  
jindw 写道
高手,写的都是伪码啊,呵呵
reduce_result[1]  ||=0

这个是语法错误呢。

开始我还已为真能这么写,上当了。


reduce_result[pair[0]] = reduce_result[pair[0]] || 0; 

谢谢指正 确实是伪码,数组的each方法需要自己实现。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics