简介
- 一般将RDD称为Spark体系中的第一代编程模型
- DataFrame称为Spark体系中的第二代编程模型
- Dataset吸收了RDD的优点(强类型推断和函数式编程)和DataFrame中的优化(SQL优化引擎,内存列存储)成为Spark最新一代的编程模型
RDD
RDD:又称弹性分布式数据集,是Spark对数据进行的一种抽象,可以理解为Spark对数据的一种组织方式,RDD就是一种数据结构,里面包含了数据和操作数据的方法
- 弹性
- 数据可完全存放在内存中或完全存放在磁盘,也可部分存放在内存,部分存放在磁盘,并可以自动切换
- RDD出错后可自动重新计算(通过血缘自动容错,即依赖关系)
- 可checkpoint(设置检查点,用于容错),可persist或cache(缓存)
- 里面的数据是分片的(也叫分区,partition),分片的大小可自由设置和细粒度调整
- 分布式
- RDD中的数据可存放在多个节点上
- 数据集
- 数据的集合
DataFrame
DataFrame:其思想来源于Python的pandas库,DataFrame在RDD的基础上加了Schema(描述数据的信息,可以认为是元数据)
优点:
- DataFrame配套了新的操作数据的方法,DataFrame API(如df.select())和SQL(select id, name from xx_table where …)
- 有了DataFrame这个高一层的抽象后,处理数据更加简单,甚至可以用SQL来处理数据,对开发者来说易用性有了很大的提升
- 通过DataFrame API或SQL处理数据,会自动经过Spark 优化器(Catalyst)的优化,即使程序或SQL的效率不高,也可以运行很快
DataSet
DataSet:相对于DataFrame,Dataset提供了强类型支持,为RDD的每行数据添加类型约束
Dataset中的数据
优点
- 使用Dataset API的程序会经过Spark SQL的优化器进行优化
- 目前仅支持Scala、Java API,尚未提供Python的API
- 相比DataFrame,Dataset提供了编译时类型检查,会在编译时就报错,便于编程