如果单从概念上来说,Mapreduce和R中的函数lapply, tapply并无差别,它们都是把元素转化成列,然后计算索引(Mapreduce中的键),最后合并成一个定义好的组合。首先,让我们看一个简单的lappy的例子。

small.ints = :
sapply(small.ints, function(x) x^)

这个例子比较简单,只是计算了前1000个整数的平方,不过我们可以从这个例子中对lappy这个函数有个基本的认知,接下来关于这个函数还有更多有意思的例子。现在让我们再来看看如何用Mapreduce来等同实现上一段程序的功能吧。

small.ints = to.dfs(:)

mapreduce(
input = small.ints,
map = function(k, v) cbind(v, v^))

通过以上程序,我们便轻松完成了第一个Mapreduce任务。这段Mapreduce程序和Lapply程序实现的功能基本上是一样的,但仍有一些相异处,让我们先来看看Mapreduce 的前两行代码。第一行代码通过函数to.dfs实现将数据放入HDFS。HDFS是Hadoop分布式文件系统,用来存放需要运作Mapreduce任务的数据。这里要说明一下,to.dfs并不适合写入海量数据,更适合用来做一些小的测试用例,或者修改bug之类的任务。如果你不指明存放数据的位置和名称,to.dfs会默认将数据存入临时文件,并且在任务结束后会自动清空数据。to.dfs函数的返回值是一个大数据对象。我们可以把它赋给一个变量,传给另外的rmr函数、Mapreduce任务,或者只是把它读回。to.dfs是一个stub,也就是说,数据不在内存中,只有一些信息帮助定位和管理数据。通过这种方式你可以使用一些超出内存限制的大数据。

现在让我们来看第二行代码。这行代码使用了Mapreduce函数来替代Lapply函数。对于Mapreduce,我们更倾向于使用已命名的参数,因为Mapreduce需要用到的参数比较少,不过这点并不是强制的。在这行代码中,我们输入的变量是small.ints,这个变量包含了to.dfs输出的数据。在我们的HDFS版本中,to.dfs输出的数据可以是一个文件的路径,也可以是一个混合有数据和文件的列表。在R中使用时,map函数(与之相反的是reduce函数,在接下来的介绍中我们会提到)需要注意一些限制条件:

1. map函数含有两个参数,一个是键:key,一个是值:value;

2. 当map函数返回键值对时,使用的函数是keyval。keyval的参数形式可以是向量,列表,矩阵或者是数据框架;当然,你也可以返回NULL值。当调用keyval时,你可以不必指明所有的参数,返回值x会被转成keyval(NULL,x)的调用值。当reduce函数已经确定时,在Map函数中使用空键是不允许的,而当使用combine函数时,这种情况更不允许发生,因为在shuffle阶段必须要指定键。

在这个例子中,我们只使用了值而没有使用键,如果要完成一个基本的Mapreduce用例,我们需要同时使用键和值。Mapreduce返回的值是一个大数据对象,你可以把它当做输入值传给其他任务,或者用from.dfs函数把它读入内存。与to.dfs类似的是,from.dfs同样不适用于海量数据,它返回的是一个键-值对的集合。当mapreduce任务生成的是一个相对小规模的结果时,比如合计,from.dfs就比较适用,接下来可以对其结果进行更进一步的可视化操作,使得结果更具易读性。在产出工作中,from.dfs比to.dfs更重要。

RHadoop教程翻译系列 _Mapreduce(1)_第一个Mapreduce任务的更多相关文章

  1. Entity Framework教程翻译 ---- 系列教程

    Entity Framework教程(第二版) (翻译)Entity Framework技巧系列之十四 - Tip 56 (翻译)Entity Framework技巧系列之十三 - Tip 51 - ...

  2. 4.Swift教程翻译系列——Swift基本运算符

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 运算符是指一个特殊的符号,能够用来查看.更改值或者相加.比方说加法运算符+能够讲 ...

  3. 2.Swift教程翻译系列——Swift概览

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 依照传统学习程序语言都是从hello,world開始,在Swfit里面仅仅须要一 ...

  4. 1.Swift教程翻译系列——关于Swift

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 我本来是做JAVA的.可是有一颗折腾的心,苹果公布Swift以后就下载了苹果的开 ...

  5. 8.Swift教程翻译系列——控制流之条件

    3.条件语句 常常会须要依据不同的情况来运行不同的代码. 你可能想要在错误发生的时候运行一段额外的代码,或者当某个值变得太高或者太低的时候给他输出出来.要实现这些需求,你能够使用条件分支. Swift ...

  6. 5.Swift教程翻译系列——Swift字符串和字符

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 字符串是一组字符的有序序列,比方"hello,china"或 ...

  7. 6.Swift教程翻译系列——Swift集合类型

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 Swift提供数组和字典两种集合类型.用来存储很多值的情况.数组有序的存储一组同 ...

  8. Android官方教程翻译(4)——启动另一个Activity

    Starting Another Activity 启动另一个Activity PREVIOUSNEXT THIS LESSON TEACHES YOU TO 这节课教你 1.   Respond t ...

  9. 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

随机推荐

  1. log log4net用代码记录日志

    log4net  用代码记录日志 今天在开发项目的时候,遇到跨域调用log4net中的类,出现了一个bug,提示LogImpl未标记可序列化,此时,我靠,麻烦了,这个类又不是咱们自己的,改源码我想应该 ...

  2. Node 实现 AES 加密,结果输出为“byte”。

    Node 实现 AES 加密,结果输出为"byte". 最近做个需求,对接一个平台的接口,该平台采用 AES (Advanced Encryption Standard)加密算法, ...

  3. Eclipse 修改debug当前行的颜色

    window --preferences--general--editors--text editors--annotations--debug current instruction pointer

  4. 用xshell操作linux系统的常用命令

    (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...

  5. 几条复杂的SQL语句

    表结构:CREATE TABLE [dbo].[Exam](    [S_date] [datetime] NOT NULL,    [Order_Id] [varchar](50) NOT NULL ...

  6. Tuning 01 Overview of Oracle Performance Tuning

    永无止境的调优 service level agreements: 是一个量化的调优的指标. performance 只要满足业务OK就可以了, 没必要调的很多, 因为有得必有失, 一方面调的特别优化 ...

  7. 矩阵-DirectX与OpenGL的不同

    http://www.cnblogs.com/graphics/archive/2012/08/02/2616017.html 矩阵是三维图形学中不可或缺的部分,几乎所有和变换相关的操作都涉及矩阵,世 ...

  8. R语言实战读书笔记(四)基本数据管理

    4.2 创建新变量 几个运算符: ^或**:求幂 x%%y:求余 x%/%y:整数除 4.3 变量的重编码 with(): within():可以修改数据框 4.4 变量重命名 包reshape中有个 ...

  9. Asp.Net正则获取页面a标签里的内容

    Asp.Net正则获取页面a标签里的内容 string url = "http://www.114369.com"; string html = MyCLib.NetClass.S ...

  10. hadoop数据容易出现错误的地方

    最近在搞关于数据分析的项目,做了一点总结. 下图是系统的数据流向.容易出现错误的地方.1.数据进入hadoop仓库有四种来源,这四种是最基本的数据,简称ods,original data source ...