1.RDD的定义
RDD(Resilient Distributed Dataset) ,分布式弹性数据集,是Spark上的一个核心抽象表示用于并行计算的,不可修改的,对数据集合进行分片的数据结构。任何数据在Spark中都被表示为RDD。从开发者角度来看, RDD是Spark的一个对象,它本身存在于内存中,如读文件是一个RDD,对文件计算也是一个RDD,结果集也是一个RDD,不同的分片、数据之间的依赖、Key-value类型的map数据都可以看做RDD。从编程的角度来看,RDD可以简单看做一个数据。和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。因此,Spark应用程序就是把需要处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果。
2.RDD 的特点
(1)它具备像MapReduce等数据模型的容错特性,并且允许开发人员在大型集群上执行基于内存的计算。RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RDD上的批量操作来创建。
(2)RDD是只读的、分区记录的集合。RDD只能基于稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。这些确定性操作称作为转换,如map、filter、groupBy、join。
(3)RDD不需要物化。RDD含有如何从其他RDD衍生出本RDD的相关信息,据此可以从物理存储的数据计算出相应的RDD分区
(4)RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency;若多个Child RDD 分区都可以依赖,则称之为wide dependency。