RDD基础
一、RDD基本特征
1.RDD是一个基本的抽象,操作RDD就像操作本地集合一样,降低了编程的复杂度。
A Resilient Distributed Dataset (RDD), the basic abstraction in Spark。
弹性的 可恢复的 分布式的 数据集,是spark中的基本抽象。
2.RDD的特征
-
A list of partition
-
A function for computing each split
-
A list ofo RDD on other RDDs
-
Optionally,a partitioner for key-value RDDs
-
Optionally,a list of perferred locations to compute each split on
-
一系列分区,分区有编号,有顺序;
-
每一个输入切片会有一个函数作用在上面;
-
RDD与RDD之间存在依赖关系;
-
(可选)RDD中如果存储的是KV类型,shuffle时会有一个分区器,默认是HashPartitioner ;
-
(可选)如果是读取HDFS中的数据,那么会有一个最优位置。
3.RDD的类别
RDD的算子分为两类,一类是Transformation(lazy),一类是Action(触发任务执行)
RDD不存在真正要计算的数据,而是记录了RDD的转换关系(调用了什么方法,传入了什么函数)
4.创建RDD的方式
(1)通过外部的存储系统创建RDD
(2)将Driver的Scala集合通过并行化的方式编程RDD(试验)
(3)调用一个已经存在的RDD的Transformation,会生成一个新的RDD
4.1RDD的Transformation的特点
(1)lazy
(2)生成新的RDD
5.RDD分区的数据取决于哪些因素?
(1)如果是将Driver端的Scala集合并行化创建RDD,并且没有指定RDD的分区,RDD的分区就是为该app分配的核数
(2)如果是从HDFS中读取数据创建RDD,并且设置了最新分区数量是1,
那么RDD的分区数据既是输入切片的数据,如果不设置最小分区的数量,
既spark调用textFile时会默认传入2,那么RDD的分区数量会大于等于输入切片的数量
6.RDD与普通的集合有哪些区别?
RDD里面记录的是描述信息(从哪里读数据,以后对数据如何计算)、
RDD的方法分为两类:Transformation(lazy)、Action(生成Task,
并发送到Executor中执行)。
Scala存储的是真正要计算的数据、执行方法后立即返回结果。
【注】本文参考自小牛课堂