一、什么是RDD
A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable, partitioned collection of elements that can be operated on in parallel.
弹性分布式数据集(RDD),Spark中的基本抽象。表示可以并行操作的元素的不变分区集合。
- 弹性:可以存储在磁盘或内存中(多种存储级别)
- 分布:分布在集群中的只读对象集合(由多个Partition构成)
(一)特性
1、分区
上述定义中也说了RDD是一个抽象的概念,数据是存储在RDD下的Partition分区,这些分区可以分布在一个节点上,也可以分布在不同的节点上。
2、依赖
上述定义中RDD是只读和不可变的,那么如果想要改变其中的值,通过不断创建变量这种方式来实现。比如:
#定义一个变量 x = 2 #改变这个值,此时有多了一个变量y,同时有聊新的值 y = 2x + 1
这样,可以不断创建新的变量,形成血缘依赖关系。
3、缓存
默认是缓存到内存的,但是支持多种缓存策略,可以灵活的进行变更。
(二)核心属性
调度和计算都依赖于这五个属性:
- 分区列表
RDD是一个抽象的概念,它对应多个Partition,所以有一个分区列表的属性
- 依赖列表
RDD中的变量是不可变的,它是有一个依赖关系,这与上面的依赖特性进行对应。
- Compute函数,用于计算RDD各分区的值
- 分区策略(可选)
数据是如何对应一个RDD中的多个Partition。
- 优先位置列表(可选,HDFS实现数据本地化,避免数据移动)
二、RDD的生成
RDD的生成有三种方式,分别是:
- 从外部文件创建
- 集合并行化
- 从父RDD生成子RDD
(一)从外部文件创建
- 支持本地磁盘文件
- 支持整个目录、多文件、通配符
- 支持压缩文件
- 支持HDFS
读取文件使用的方法是textFile:
textFile(name, minPartitions=None, use_unicode=True) Read a text file from HDFS, a local file system (available on all nodes), or any Hadoop-supported file system URI, and return it as an RDD of
Strings.
读取各种本地文件、目录、HDFS的形式:
SC.textFi le(“/1.tXt, /02.tXt“) #支持多文件,中间以逗号分隔 SC.textFi le(”/*.txt“) #支持通配符