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操作,这对于迭代运算比较常见的及其学习算法,交互数据挖掘来说,效率提升比较大.