前言

本期继续讲解 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. vimrc-20201028重新配置
  2. 慢查询日志中出现超大时间的案例分析
  3. Qt学习之路(24): QPainter
  4. codeforces global round 1题解搬运
  5. jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第一部分)
  6. 拦截器原理多个拦截器执行顺序
  7. 细谈Web框架设计与实现
  8. matlab自带同步电机数学模型,永磁同步电机的数学模型及方程
  9. 《西河大鼓——调寇》(艳桂荣音配像)
  10. 从零基础入门Tensorflow2.0 ----八、39.2. gpu2
  11. 囧研究:焦虑的人能更快速地做出决定
  12. qtp测试 java web_QTP之web常用对象
  13. 基于Access的学生信息管理系统设计(下):窗体设计
  14. 书_阿朱_好好看书[转]
  15. 人工智能之模式识别(二)
  16. springboot--dubbo+nacos+LCN整合详解
  17. android 自动连接WiFi
  18. 软件测试面试考什么综合素质,综合素质测评都考了啥
  19. H3C/华为网络设备常规命令集
  20. 云计算存储之Ceph是什么?

热门文章

  1. Python从入门到转行
  2. 重塑价值:新一代ITSM平台的建设、咨询与实施
  3. 软件项目管理进度计划-Gantt图和工程网络图,工程网络是系统分析和系统设计的强有力的工 具
  4. 一篇文章彻底掌握 hive 中的 ORDER/SORT/CLUSTER/DISTRIBUTE BY 和 BUCKET 桶表
  5. 使用 Vert.x Maven 插件快速创建项目
  6. (python代码)BP神经网络模型
  7. [转]CDN中,字体文件的跨域问题和解决
  8. 2016年度最受欢迎中国开源软件评选 - 开源中国社区
  9. 无人机基础知识:多旋翼无人机飞行原理及飞行模式
  10. 动态规划之线性DP题集