RDD
全称为 Resilient Distributed Datasets (弹性分布式数据集) , 是 Spark 最基本的数据抽象。代码中是一个抽象类,它代表一个不可变,可分区,里面元素可并行计算的集合。
- 一个 RDD 由一个或者多个分区 (Partitions) 组成。对于 RDD 来说,每个分区会被一个计算任务所处理,用户可以在创建 RDD 时指定其分区个数,如果没有指定,则默认采用程序所分配到的 CPU 的核心数。
- RDD 拥有一个用于计算分区的函数 compute
- RDD 会保存彼此间的依赖关系,RDD 的每次转换都会生成一个新的依赖关系,这种 RDD 之间的依赖关系就像流水线一样。在部分分区数据丢失之后,可以通过这种依赖关系重新计算丢失的分区数据,而不是对 RDD 的所有分区进行重新计算
- Key-Value 型 RDD 还拥有 Partitioner(分区器) , 用于决定数据被存储在哪个分区中,目前 Spark 中支持 HashPartitioner(安装哈希分区) 和 RangePartitioner(按照范围进行分区)
RDD 其实实现的思想也是 装饰者模式
spark 会优先计算数据存放在哪个 DataNode
**算子:**解决问题其实是将问题的初始状态,通过一系列的操作(Operate:算子)对问题进行转换,然后达到完成(解决) 状态
Spark 中的所有的 RDD 方法都称为算子,但是分为两大类:转换算子 & 行动算子
创建
创建方式有三种:
- 从集合中创建 RDD
- 从外部存储创建 RDD
- 从其它 RDD 中创建 RDD