spark---RDD
RDD
分布式计算需要:
- 分区控制
- Shuffle控制
- 数据存储\序列化\发送
- 数据计算API
- 等一系列功能
这些功能, 不能简单的通过python内置的本地集合对象(如List\字典等)去完成, 我们在分布式框架中, 需要有一个统一的数据抽象对象, 来实现上述分布式计算所需要功能, 这个抽象对象, 就是RDD.
RDD定义:
- RDD叫做弹性分布式数据集, 是spark中最基本的数据抽象, 代表一个不可变, 可分区, 里面元素可并行计算的集合
- Dataset: 一个数据集合, 用于存放数据的,
- Distributed: RDD中的数据是分布式存储的, 可用于分布式计算(RDD的数据是跨越机器存储的)
- Resilient: RDD中的数据可以存储在内存中或者磁盘中
RDD的五大特性:
- RDD是又分区的
- 计算方法都会作用到每一个分片(分区)之上
- RDD之间是有相互依赖的
- K,V型RDD可以有分区器
- RDD分区数据的读取会尽量靠近数据所在地(计算向数据移动)
RDD算子:
- 算子: 分布式集合对象上的API称之为算子
- 方法\函数: 本地对象的API,叫做算子
算子分类
- Transformation: 转换算子
- 定义: RDD的算子, 返回值仍旧事一个RDD, 称之为转换算子
- 特性: 这类算子事lazy 懒加载的, 如果没有action算子, Transformtion算子是不工作的
- Action: 动作(行动)算子
- 定义: 返回值不适RDD的就是action算子
弹性分布数据集
- RDD是spark最基本的抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现, RDD是spark最核心的东西,它表示已被区分,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现,RDD必须是可序列化的,RDD可疑cache到内存中,每次对RDD数据集的操作之后的结果, 都可以存放到内存中,下一个操作可疑直接从内存中获取,省去了MapReduce大量的磁盘IO操作,这对于迭代运算比较常见的及其学习算法,交互数据挖掘来说,效率提升比较大.