spark抽象数据集列表
RDD
DataFrame
DataSet
- ** 相同点**
全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利
三者都有惰性机制,在进行Transform操作时不会立即执行,在遇到Action操作时会正式提交作业执行。
均采用spark的内存运算和优化策略,内存使用和执行效率上均可以得到保障。
均有partition的概念,便于分布式并行计算处理,达到分而治之。
均有许多共同的函数,如map、filter、sort等。
在进行三者的相关操作时候,个别特殊操作时必须引入一个相同的包依赖。( 早期称为 import sqlContext.implicits.,最新版本称为import spark.implicits.)
DF和DS均可以通过模式匹配获取内部的变量类型和值。
DF和DS产生于SparkSql,天然支持SparkSql。 - 区别点
RDD
不支持SparkSql操作,均需进行转成DF或是DS才行。
类型是安全的,编译时候即可检查出类型错误。(强类型)
机器间通信、IO操作均需要序列化、反序列化对象,性能开销大。
DataFrame
有scheme的RDD:比RDD增加了数据的描述信息。
比RDD的API更丰富,增加了针对结构化数据API。
只有一个固定类型的DataSet,即为DataFrame=DataSet[Row]
序列化和反序列化时做了结构化优化,减少了不必要的结构化信息的序列化,提高了执行效率。
DataSet
强类型的DataFrame,与DF有完全相同的成员函数。
每行的类型不固定,需要使用模式匹配case class后,获取实际的类信息、字段类型、字段值。
访问对象数据时,比DF更加直接简单。
在序列化和反序列化时,引入了Encoder机制,达到按需序列化和反序列化,不必像之前整个对象操作了,进一步提高了效率。