前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每周学点大数据 | No.74 Spark 的核心操作——Transformation 和 Action

每周学点大数据 | No.74 Spark 的核心操作——Transformation 和 Action

作者头像
灯塔大数据
发布2018-04-03 16:10:42
7050
发布2018-04-03 16:10:42
举报
文章被收录于专栏:灯塔大数据灯塔大数据

编者按:灯塔大数据将每周持续推出《从零开始学大数据算法》的连载,本书为哈尔滨工业大学著名教授王宏志老师的扛鼎力作,以对话的形式深入浅出的从何为大数据说到大数据算法再到大数据技术的应用,带我们在大数据技术的海洋里徜徉~每周五定期更新

上期回顾&查看方式

在上一期,我们学习了在 HDFS 上使用 Spark的相关内容。PS:了解了上期详细内容,请在自定义菜单栏中点击“灯塔数据”—“技术连载”进行查看;或者滑到文末【往期推荐】查看

No.74

Spark 的核心操作——Transformation 和 Action

Mr. 王 :通过前面三个简单的小程序,相信你已经对 Spark 的使用有了一个初步的认识。不过仅仅这样还不够,还要了解分析 Spark 操作的核心内容,我们要知道,Spark 是依照什么样的规则去操作数据的。

我们先来看看前面写过的两行代码 :

这两行代码虽然非常简单,但却体现了 Spark 最核心的两个基本操作,即 Transformation和 Action。

小可 :Hadoop 有 Map 和 Reduce,Spark 有 Transformation 和 Action,挺有意思的。

Mr. 王 :嗯,但它们并不完全类似。在学习 Spark 的过程中,除了要记住它处理数据和保存中间结果的方式是 RDD,而不是 Hadoop 面向磁盘的 HDFS 之外。最重要的就是要了解这两个关键操作 :Transformation 和 Action。

小可 :那什么是 Transformation 和 Action 呢?

Mr. 王 :顾名思义,Transformation 就是变换,它的作用是将已有的 RDD 转换成新的RDD。

这是提出 Spark 平台的论文中给出的Transformation 的各种操作汇总表格。其中就包括我们之前使用的 filter。表格中给出的 Transformation 操作其实都非常好理解,就拿 filter 操作来说:

其中,输入 T 就是原始的数据集合,filter 根据映射关系 f,将原始的数据集合 T 构成的RDD 转化成一个个新的集合 RDD[T],里面的数据都来自于原来的数据集合,但它必须满足某条件,根据其布尔类型结果来判断它是不是应该被加入到变换之后的 RDD[T] 中。我们知道,布尔类型就是真和假,如果满足某条件,我们称之为真,反之称之为假。就拿我们的例子来说,如果某一行数据中包含“Spark”关键词的话,映射关系 f 就会将其确定为真,否则为假。从本质上来讲,filter 相当于进行了一个条件筛选工作。

小可 :哦!这样就实现了将含有“Spark”关键词的句子都挑选出来的功能,它们都会被映射关系 f 标记为真。

Mr. 王 :是这样的。仔细观察会发现,Transformation 中定义的操作都非常的实用,可以满足我们对数据集合的各种变换操作。

比如 Map :

map ( f: T => U ) : RDD[T] => RDD [U]

将一个数据集合映射变换为另一个数据集合,适合我们进行各种变换操作。

这个操作我们在编写 WordCount 时是使用过的。那时,要将句子切分好的单词 word 映射变换成 (word,1) 这样的键值对。

小可 :此处的 map 函数就起到了在 Hadoop 版本的 WordCount 中 Mapper 的作用,将文档中的单词变换为 (word,1) 这样的键值对。

Mr. 王 :另外一个非常常用的函数就是reduceByKey :

小可 :这个函数我们在 WordCount 中也使用过。

Mr. 王 :顾名思义,reduceByKey 会对具有相同键值的 key-value 对执行一个操作,这个操作由函数 f 进行定义。

小可 :哦,观察 WordCount 中的 reduceByKey 的确可以发现 :

就是对相同键值后面携带的两个值 a 和 b 求 a+b 之后,变成两个键值对合并之后的新value。

Mr. 王 :第一轮变换,将所有的关键词都映射成(word,1) 这样的键值对,比如 (Hello,1)。在这一步执行 reduceByKey 时,两个 (Hello,1) 相遇,就会被执行 (a,b:a+b) 操作,也就是合并为 (Hello,2)。相应的操作会继续执行下去,直到所有的 (Hello,1) 都完成了合并,得到 Hello 关键词的最终计数结果。

小可 :在 WordCount 中,reduceByKey 执行了相当于 Hadoop 中 Reduce 的操作。

Mr. 王 :groupByKey 算是 reduceByKey 的一个特殊情况,它执行的就是将具有相同 key 值的键值对进行合并,使这些键值对的 value 构成一个列表,并以 key 值和这个列表组成新的键值对,构成RDD。

小可 :这也是一个很实用的功能啊。

Mr. 王 :像 union、join、sort、crossProduct 这样的操作从名字上就非常容易理解,它们可以实现合并、值组合连接、排序、叉积这些非常常用的操作,也为基于 Spark 实现各种数据库操作、实现基于 Spark 的 SQL(数据库查询语言)语句提供了重要的基础。可以看出,Spark为我们提供的 API 还是非常强大的。

小可 :Action 又是什么呢?

Mr. 王 :事实上,当向 Spark 平台写入Transformation 时,Spark 并不会立即执行 Transformation操作,它更多的是对来自于 RDD 的数据变换形式进行定义,当 Action 操作被输入到 Spark 中时,才会真正地开始进行实际的运算。Spark 会根据前面定义的数据变换形式和 Action 执行的具体操作,将需要各种工作真正地分配给机群去执行。

我们来看看 Action 里面包含的操作。

这是一个非常典型的 Action 操作,就是对数据集合 RDD 或者是经过多轮 Transformation变换的那些 RDD 的记录个数进行统计的操作。我们执行的第一个 Spark 程序行计数就使用了这个操作。

另一个非常常用的操作就是 collect。

小可 :我们在查找某个关键词出现的所有句子时,就使用了这个操作。

Mr. 王 :我们来看看它的定义。

其实这个操作也很简单,它将 RDD 中所有的数据记录收集起来,形成一个列表,以便于之后的保存等操作。这个操作往往要配合前面的各种变换进行,用于生成结果列表。其实我们还使用过 save 这个操作,它可以将一个 RDD 存储为文件,一般用来存储大量的处理结果,可以存储在像 HDFS 这样的文件系统中。

小可 :就是我们使用过的 saveAsTextFile 函数吧。

Mr. 王 :是的。了解了 Transformation 和 Action 这两种操作,就可以用 Spark 设计绝大多数的并行程序了,回去多多尝试,很快就可以熟练地运用它们,这也是并行编程框架为我们提供的方便。

下期精彩预告

经过学习,我们研究了Spark 的核心操作——Transformation 和 Action涉及到的一些具体问题。在下一期中,我们将进一步了解Spark 实践案例——PageRank的相关内容。更多精彩内容,敬请关注灯塔大数据,每周五不见不散呦!

文章作者:王宏志

文章编辑:天天

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灯塔大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档