Spark 基础 RDD介绍

时间:2022-09-15 01:25:03

1. 什么是RDD?

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可以并行计算的集合。

  • Dataset:一个数据集合,用于存放数据
  • Distributed:RDD中的数据是分布式存储的,可用于分布式计算
  • Resilient:RDD中的数据可以存储在内存中或磁盘中

Spark 基础 RDD介绍
RDD(Resilient Distributed Dataset)弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合;所有的运算以及操作都建立在 RDD 数据结构的基础之上;可以认为RDD是分布式的列表List或数组Array,抽象的数据结构,RDD是一个抽象类Abstract Class和泛型Generic Type
Spark 基础 RDD介绍

2. RDD五大特性

2.1 RDD是有分区的

RDD的分区是RDD数据存储的最小单位,一份RDD的数据,本质上是分隔了多个分区
Spark 基础 RDD介绍

2.2 RDD的方法会作用在其所有的分区上

Spark 基础 RDD介绍
如上图,RDD的3个分区,在执行了map操作将数据都乘以了10,结果可以看到,3个分区的数据都乘以10了

2.3 RDD之间是有依赖关系(血缘关系)

Spark 基础 RDD介绍
如上代码,RDD之间是有依赖关系的,rdd2会产生rdd3,但是rdd2依赖rdd1;同样rdd3会产生rdd4,但是rdd3依赖rdd2;以此会形成一个依赖链条OA,这个链条称之为RDD的血缘关系。

2.4 Key-Value型的RDD可以有分区器

默认的分区器是Hash分区规则,可以手动设置一个分区器,这个特性是可能的,因为不是所有的RDD都是Key-Value型。Key-Value RDD中存储的是二元元祖,这就是Key-Value型RDD。二元元组是只有2个元素的元组,比如(“spark”, 6)

2.5 RDD 的分区规则,会尽量靠近数据所在的服务器

在初始RDD(读取数据的时候)规划的时候,分区会尽量规划到存储数据所在的服务器上,因为这样可以走本地读取,避免网络读取。

本地读取:Executor所在的服务器,同样是一个DataNode,同时这个DataNode上有它要读取的数据,所以可以直接读取机器硬盘即可,无需走网络传输
网络读取:读取数据,需要经过网络的传输才能读取到

Spark会在确保并行计算能力的前提下,尽量确保本地读取。