`
dacoolbaby
  • 浏览: 1269355 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MapReduce函数的JavaScript模拟实现

阅读更多

转载自 D瓜哥
对于像我一样的菜鸟理解MapReduce模型非常有用。
上代码~~!

 

<html>
<head>
<title>MapReduce JS test</title>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>
<script>
var Job = { 
//待处理的数据 
data : [ 
"We are glad to see you here. This site is dedicated to", 
"poetry and to the people who make poetry possible", 
"poets and their readers. FamousPoetsAndPoems.com is", 
"a free poetry site. On our site you can find a large", 
"collection of poems and quotes from over 631 poets", 
"Read and Enjoy Poetry", 
"I, too, sing America", 
"I am the darker brother", 
"They send me to eat in the kitchen", 
"When company comes", 
"But I laugh", 
"And eat well", 
"And grow strong", 
"Tomorrow", 
"Ill be at the table", 
"When company comes", 
"Nobodyll dare", 
"Say to me", 
"Eat in the kitchen", 
"Then", 
"Besides", 
"Theyll see how beautiful I am", 
"And be ashamed", 
"I, too, am America" 
], 
//将数据中的每行字符串用空格分隔开, 
//map函数用于拆分数据
//并"重组"成诸如{key: 单词, value: 1}格式的对象,返回对象数组 
map : function(line) { 
var splits = line.split(" "); 
var temp = []; 
for(var i=0; i<splits.length; i++) { 
temp.push({key : splits[i], value : 1}); 
} 
return temp; 
}, 
//计算每个单词在"数据"(data)中出现的次数 
//reduce函数用于聚合归并数据
reduce : function(allSteps) { 
var result = {}; 
for(var i=0; i<allSteps.length; i++) { 
var step = allSteps[i]; 
result[step.key] = result[step.key] ? (result[step.key] + 1) : 1; 
} 
return result; 
}, 
//初始化,同时是运行的入口。 
init : function() { 
var allSteps = []; 
for(var i=0; i<Job.data.length; i++) { 
//如果这里能多线程调用Job.map函数就更逼真了。?? 
//用循环代替多线程并发,对每一“行”数据进行拆分
allSteps = allSteps.concat(Job.map(Job.data[i])); 
} 
//美中不足,这里不能多线程调用Job.reduce函数?? 
var result = Job.reduce(allSteps) 
console.log(JSON.stringify(result)); 
} 
}; // Job 
//开始执行 
Job.init(); 

</script>
	
hadoop MapReduce test

</body>
</html>

 

 

请在Firefox里面运行以上代码

 

分享到:
评论

相关推荐

    Lambda函数对S3对象的并发控制forEachmapreducefilter

    在处理S3对象时,我们可以模拟传统的forEach、map、reduce和filter方法,但需要注意的是,由于Lambda的执行环境是异步的,所以不能直接使用同步版本的这些函数。以下是如何在Lambda中实现这些操作: 1. **forEach**...

    MongoDB服务器端脚本.pdf

    总的来说,MongoDB服务器端脚本的使用极大地增强了数据库的灵活性和功能性,允许开发者使用JavaScript执行复杂的操作和实现自定义功能。`db.eval`和`system.js`集合是MongoDB提供的重要工具,使得在数据库环境中执行...

    数据库CouchDB入门到精通视频课程下载整理.zip

    2. MapReduce查询:CouchDB使用MapReduce函数进行数据聚合和索引,这使得复杂查询成为可能,同时也支持视图的创建。 3. 多版本并发控制:CouchDB采用MVCC(多版本并发控制)机制,允许多个用户同时修改同一文档,...

    mongodb-基础知识和高级知识

    4. 触发器与用户定义的函数(UDF):虽然MongoDB不像传统SQL数据库那样内置触发器,但可以通过自定义的脚本或应用程序逻辑来模拟触发器行为。同时,可以借助外部脚本语言(如JavaScript)实现UDF。 5. 安全性:...

    JavaScriptFinalEvaluation:评估最终的BigDataJavaScript

    该项目可能使用了诸如MapReduce、流处理等大数据处理模型,这些模型通过JavaScript实现,能够处理大规模数据集。 描述中提到的"BigData / JavaScript"可能意味着项目结合了大数据技术,如Hadoop或Spark,与...

    mongodb eval 执行服务器端脚本

    这些变量和函数可以在任何 MongoDB JavaScript 上下文中调用,包括 `$where` 子句、`db.eval` 调用和 MapReduce 作业。你可以使用 `insert` 方法将 JavaScript 代码存入 `system.js`: ```javascript // 定义变量 ...

    代码之美(中文完整版).pdf

    23.4 分布式MapReduce的一种实现 23.5 模型扩展 23.6 结论 23.7 进阶阅读 23.8 致谢 23.9 附录:单词计数解决方案 第24章 美丽的并发 24.2 软件事务内存 24.3 圣诞老人问题 24.4 对Haskell的一些思考 24.6 致谢 第25...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **准备策略**:提前准备并模拟面试场景。 ### 腾讯面试/阿里面试 - **面试流程**:包括技术面试、HR面试等环节。 - **面试技巧**:强调团队合作和个人成就。 ### 安卓签到精灵app - **功能**:实现自动签到。 ...

Global site tag (gtag.js) - Google Analytics