Spark-RDD简介

2020-07-06  本文已影响0人  布莱安托

什么是RDD

RDD(Resilient Distributed Dataset)称为弹性分布式数据集,是Spark中最基本的数据计算抽象。代表了一个不可变、可分区、可并行计算的集合。

RDD体现了装饰者设计模式,将数据处理的逻辑进行了封装。

RDD的属性

  1. 分区列表
  2. 计算分区的函数
  3. RDD间的依赖关系
  4. 【可选】适用于键值对类型RDD的分区器(Partitioner)
  5. 【可选】用于计算分区的首选位置列表

RDD的特点

RDD表示只读的分区数据集,对RDD进行改动,只能通过转换操作,由一个RDD的到另一个新的RDD,新的RDD包含了从其他RDD衍生所必须的信息,即RDD之间存在依赖,也称之为RDD间的血缘关系。

RDD的执行是按照血缘关系延时计算的,如果血缘关系较长,可以通过持久化RDD来切断血缘关系。

分区

RDD逻辑上是分区的,每个分区数据是抽象存在的,计算时会通过compute方法的到每个分区的数据。

只读

RDD是只读的,想要改变RDD中的数据,只能在现有RDD的基础上创建新的RDD。

由一个RDD转换到另一个RDD,可以通过各种算子实现。

image.png

RDD算子包括两类,一类叫变形算子(transformations),用来将RDD进行转化,构建RDD间的血缘关系;另一类叫行动算子(actions),用来触发RDD的计算,得到相关计算结果或保存RDD

依赖

RDD通过操作算子进行转换,转换得到的新RDD包含了其他RDD衍生所需必须的信息,RDD之间维护的这种血缘关系,也称之为依赖。

如下图所示,依赖包括两种,一种叫窄依赖(Narrow Dependencies),RDD之间分区是一一对应的;另一种是宽依赖(Wide Dependencies),下游的RDD的每个分区与上游RDD的每个分区都有关,是一种多对多的关系

image.png

缓存

如果在应用程序中多次同一个RDD,可以将该RDD缓存起来,这样该RDD只有在第一次计算的时候会根据血缘关系的到分区的数据,后续使用都会从缓存读取而不用再根据血缘关系计算。

上一篇 下一篇

猜你喜欢

热点阅读