前言

本期继续讲解 Spark 核心 RDD 编程部分,内容比较干货也比较长,建议大家先收藏。

学习目标

  • RDD 的创建
  • RDD 的转换操作
  • RDD 的行动操作
  • 惰性求值

1. RDD 的创建

Spark 提供了两种创建 RDD 的方式:对一个集合进行并行化操作和利用外部数据集生成 RDD 。

对一个集合进行并行化操作

Spark 创建 RDD 最简单的方式就是把已经存在的集合传给 parallelize() 方法,不过,这种方式在开发中并不常用,毕竟需要将整个的数据集先放到一个节点内存中。

利用 parallelize() 方法将已经存在的一个集合转换为 RDD,集合中的数据也会被复制到 RDD 中并参与并行计算。

val lines = sc.parallelize(Arrays.asList(1,2,3,4,5),n)

其中,n 为并行集合的分区数量,Spark 将为集群的每个分区都运行一个任务。该参数设置太小不能很好地利用 CPU,设置太大又会导致任务阻塞等待,一般 Spark 会尝试根据集群的 CPU 核数自动设置分区数量。

利用外部数据集生成 RDD

在开发中,Spark 创建 RDD 最常用的一个方式就是从 Hadoop 或者其他外部存储系统创建 RDD,包括本地文件系统、HDFS、Cassandra、HBase、S3 等。

通过 SparkContext 的 textFile() 方法来读取文本文件创建 RDD 的代码,如下:

val lines = sc.textFile("../temp.txt")

其中,textFile() 方法的 url 参数可以是本地文件或路径、HDFS路径等,Spark 会读取该路径下所有的文件,并将其作为数据源加载到内存生成对应的 RDD。

当然, RDD 也可以在现有 RDD 的基础上经过算子转换生成新的 RDD,这是接下来要讲的RDD 算子转换的内容,Spark RDD 支持两种类型的操作:转换操作(Transformation) 和行动操作(Action)。

2. RDD 的转换操作

转换操作是指从现有 RDD 的基础上创建新的 RDD,是返回一个新 RDD 的操作。转换操作是惰性求值的,也就是不会立即触发执行实际的转换,而是先记录 RDD 之间的转换关系,只有当触发行动操作时才会真正地执行转换操作,并返回计算结果。

举个栗子,有一个日志文件 log.txt,需要从里面若干条信息中,筛选出其中错误的报警信息,我们可以用转化操作 filter() 即可完成,代码如下:

val inputRDD = sc.textFile("log.txt")
val errorsRDD = inputRDD.filter(line => line.contains("error"))

其中,textFile() 方法定义了名为 inputRDD 的RDD,但是此时 log.txt 文件并没有加载到内存中,仅仅是指向文件的位置。然后通过 filter() 方法进行筛选定义了名为 errorsRDD 的转换RDD,同样也属于惰性计算,并没有立即执行。

3. RDD 的行动操作

了解了如何通过转换操作从已有的 RDD 中创建一个新的 RDD,但有时我们希望可以对数据集进行实际的计算。行动操作就是接下来要讲的第二种 RDD 操作,它会强制执行那些求值必须用到的 RDD 的转换操作,并将最终的计算结果返回给 Driver 程序,或者写入到外部存储系统中。

继续刚才的栗子,我们需要将上一步统计出来的报警信息的数量打印出来,我们可以借助count() 方法进行计数。

val countRDD = errorsRDD.count()

其中,count() 可以触发实际的计算,强制执行前面步骤中的转换操作。实际上,Spark RDD 会将 RDD 计算分解到不同的 Stage 并在不同的节点上进行运算,每个节点都会运行 count() 结果,所有运算完成之后会聚合一个结果返回给 Driver 程序。

如果分不清楚给定的一个 RDD 操作方法是属于转换操作还是行动操作,去看下它的返回类型,转换操作返回的是 RDD 类型,而行动操作则返回的是其他的数据类型。

4. 惰性求值

前面,我们多次提到转换操作都是惰性求值,这也就意味着调用的转换操作(textFile、filter等)时,并不会立即去执行,而是 Spark 会记录下所要求执行的操作的相关信息。

因此,我们对 RDD 的理解应该更深一步,不仅要它看作是一个存放分布式数据的数据集,而且也可以把它当作是通过转换操作构建出来的、记录如何计算数据的指令列表。

惰性操作避免了所有操作都进行一遍 RDD 运算,它可以将很多操作合并在一起,来减少计算数据的步骤,提高 Spark 的运算效率。


以上是本期分享,如有帮助请 点赞+关注+收藏 支持下哦~
下期继续讲解 RDD 内容。

往期精彩内容回顾:

1 - Spark 概述(入门必看)
2 - Spark 的模块组成
3 - Spark 的运行原理
4 - RDD 概念以及核心结构
5 - Spark RDD 的宽窄依赖关系
6 - 详解 Spark RDD 的转换操作与行动操作

详解 Spark RDD 的转换操作与行动操作相关推荐

  1. Spark函数详解系列--RDD基本转换

    http://www.cnblogs.com/MOBIN/p/5373256.html 摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行 ...

  2. java servlet dao_Java+MyEclipse+Tomcat 详解Servlet和DAO数据库增删改查操作(源码)

    [实例简介] 该资源主要参考自己的博客http://blog.csdn.net/eastmount/article/details/45936121 讲诉Java+MyEclipse+Tomcat 详 ...

  3. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv

    详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...

  4. C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作

    C#Winform的DataGridView控件使用详解2-DataGridView表格样式设置及表格操作 DataGridView表格样式设置 DataGridView行序号设置 右键弹出控件表格操 ...

  5. xp如何添加桌面计算机回收站,详解桌面回收站图标在XP电脑中操作删除的详细步骤...

    我们在电脑的很多的设置中,很多的用户都是可以打开不同的版本来设置电脑的问题的,对于电脑的回收站图标的设置有的小伙伴不是很喜欢使用桌面的这个图标怎么直接删除回收站图标的呢,今天小编就来跟大家分享一下XP ...

  6. python学习详解_深入解析Python小白学习【操作列表】

    1.遍历列表 需要对列表中的每个元素都执行相同的操作时,可使用for 循环: magicians = ['alice','david','carolina'] for magician in magi ...

  7. 云原生之kubectl命令详解(二)及pod的相关操作

    目录 一.kubectl命令详解 1.查看某个资源的详细信息:kubectl describe pod pod_name -n nameapace 2.查看指定命名空间中pod的基本信息:kubect ...

  8. MySQL Explain命令详解--表的读取顺序,数据读取操作的类型等

    表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确 ...

  9. linux搭建spark集群,详解Spark+Zookeeper搭建高可用Spark集群

    Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎:现在形成一个高速发展应用广泛的生态系统. Spark三种分布式部署方式比较 目前Apache Spark支持三种分布式部署方式, ...

最新文章

  1. Django 错误汇总
  2. Git漏洞导致攻击者可在用户电脑上运行任意代码
  3. 解读Facebook CAN:如何给人工智能赋予艺术创作的力量
  4. 编译原理(二)之语法分析
  5. python输出进度条 tqdm_python-tqdm进度条
  6. IIS支持下载.config后缀名的文件
  7. 您的浏览器由所属组织管理_FB频繁被封,关于多账号环境管理的知识你掌握了吗?...
  8. MS CRM如果在Tab页中有Iframe选项,原来速度不慢,突然速度变慢
  9. 蓝桥杯 ADV-113 算法提高 c++_ch02_02
  10. Java技术专题之JVM逻辑内存回收机制研究图解版
  11. Atitit 获取SqlSessionFactory的三种方式 目录 第一节 DataSource 方式 1 第二节 读取sprbt Url方式 ByteArrayInputStream 1 第三节
  12. Windows 11 Manager(win11优化大师)官方中文版V1.0.0 | windows11优化软件下载
  13. Excel和word的打印预览快捷键
  14. 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
  15. python 循环写入excel sheet_python 使用xlsxwriter循环向excel中插入数据和图片的操作...
  16. Android :高德地图demo
  17. matlab模拟超声波信号_MATLAB模拟超声波声速测量实验
  18. Oracle数据库经典案例之学生选课四表联合查询
  19. 看了 B 站 Elasticsearch 视频的标题,我仿佛看到了内卷的天花板
  20. PHP+swoole 聊天窒 五子棋斗地主

热门文章

  1. Android获取联系人权限
  2. android的发音功能实现,Android 使用 ToneGenerator 编写按键发声功能
  3. python爬虫之爬取起点中文原创小说排行榜
  4. window 10 前面板音频孔插入耳机没有声音
  5. vert.x笔记:4.vert.x中调用spring服务
  6. 开源中国iOS客户端学习——序
  7. mac 可以连上网,但是自带浏览器和谷歌浏览器打不开网页
  8. sql注入基础(一)
  9. 互联网银行分化:头部优势凸显,尾部承压明显
  10. c语言黑白棋程序设计报告,C语言课程设计报告--黑白棋.doc