RDD

什么是RDD(Resilient Distributed Dataset)


  RDD叫作弹性分布式数据集合,是spark中最基本的数据(计算、逻辑)抽象,在代码中它是一个抽象类,代表一个不可变、可分区、里面的元素的可并行计算的集合。

RDD属性


1.一组分区,即数据集的基本组成单位
2.一个计算每个分区的函数
3.RDD之间存在依赖关系(血统)
4.一个Partitioner,即RDD的分片函数
5.一个列表,存储存取每个Partition的优先位置(移动数据不如移动计算)

  • 进程本地化
  • 节点本地化
  • 机架本地化

RDD特点


  RDD表示只读的分区的数据集,对RDD进行改动,只能铜鼓RDD的转换操作,由一个RDD得到一个新的RDD,新的RDD包含了从其他RDD衍生所必须的信息。RDDs之间存在依赖,RDD执行的是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化RDD来切断血缘关系。如果程序中多次使用同一个RDD,可以将该RDD进行缓存,只有在第一次计算的时候回根据血缘关系得到分区数据,在后续其他地方用到直接从缓存中取

算子


Spark中所有的RDD方法都称为算子,有转换算子和行动算子两大类。

创建RDD


有三种创建方式

  • 从集合中创建
  • 从外部存储创建
  • 从其他RDD创建

注:以下都是在local部署模式下的条件上说明

从集合中创建

spark提供了两种函数:parallelize()和makeRDD(),底层实现都是用的parallelize()
1.使用parallelize()

val  arrayRDD = sc.parallelize(Array(1,2,3,4))
val  arrayRDD = sc.parallelize(Array(1,2,3,4),X) #自定义分区数量,默认是8

2.使用makeRDD()

val listRDD = sc.makeRDD(lsit(1,2,3,4))

从外部存储系统的数据集创建

默认情况下,可以读取项目路径,也可以读其他路径,例如HDFS

val fileRDD = sc.textFile("XXX")
val fileRDD = sc.textFile(("XXX"),X) #这里自定义分区为最小分区数,具体如何分区依赖于hadoop的切片规则

RDD的转换

**RDD整体上分为Value类型和Key-Value类型

任务的划分&调度

一个分区划分一个任务(Task),一个任务会被分配到Executor执行

原文地址:https://www.cnblogs.com/zqzhen/p/12747554.html