RDD理解检测
任务描述
本关任务:根据下面的相关知识,完成与数据认知相关的选择题。
相关知识
RDD介绍
RDD
是Spark
的核心抽象,即 弹性分布式数据集(residenta distributed dataset
)。代表一个不可变,可分区,里面元素可并行计算的集合。其具有数据流模型的特点:自动容错,位置感知性调度和可伸缩性。 在Spark
中,对数据的所有操作不外乎创建RDD
、转化已有RDD
以及调用 RDD
操作进行求值。
RDD结构图
RDD具有五大特性
-
一组分片(
Partition
),即数据集的基本组成单位(RDD
是由一系列的partition
组成的)。将数据加载为RDD
时,一般会遵循数据的本地性(一般一个HDFS
里的block
会加载为一个partition
)。 -
RDD
之间的依赖关系。依赖还具体分为宽依赖和窄依赖,但并不是所有的RDD
都有依赖。为了容错(重算,cache
,checkpoint
),也就是说在内存中的RDD
操作时出错或丢失会进行重算。 -
由一个函数计算每一个分片。
Spark
中的RDD
的计算是以分片为单位的,每个RDD
都会实现compute
函数以达到这个目的。compute
函数会对迭代器进行复合,不需要保存每次计算的结果。 -
(可选)如果
RDD
里面存的数据是key-value
形式,则可以传递一个自定义的Partitioner
进行重新分区。 -
(可选)
RDD
提供一系列最佳的计算位置,即数据的本地性。
RDD之间的依赖关系
RDD
之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖。
窄依赖:父RDD
和子RDD
partition
之间的关系是一对一的。或者父RDD
一个partition
只对应一个子RDD
的partition
情况下的父RDD
和子RDD
partition
关系是多对一的,也可以理解为没有触发shuffle
。
宽依赖:父RDD
与子RDD
partition
之间的关系是一对多。 父RDD
的一个分区的数据去到子RDD
的不同分区里面。也可以理解为触发了shuffle
。
特别说明:对于join
操作有两种情况,如果join
操作的使用每个partition
仅仅和已知的Partition
进行join
,此时的join
操作就是窄依赖;其他情况的join
操作就是宽依赖。
RDD创建
-
从
Hadoop
文件系统(或与Hadoop
兼容的其他持久化存储系统,如Hive
、Cassandra
、HBase
)输入(例如HDFS
)创建。 -
通过集合进行创建。
算子
算子可以分为Transformation
转换算子和Action
行动算子。 RDD
是懒执行的,如果没有行动操作出现,所有的转换操作都不会执行。
-
1、
下面哪个不是 RDD 的特点 ( C)
A、可分区
B、可序列化
C、可修改
D、可持久化 -
2、
关于Spark RDD的弹性,哪项是错误的(D)
A、容错性
B、数据调度弹性
C、内存和磁盘切换
D、固定大小 -
3、
Spark的算子类型(AC)
A、转换算子
B、迭代算子
C、动作算子
D、核心算子