同样的数据给到三个数据结构,分别计算后都会给出相同的结果。但是在执行效率和执行方式上有所不同。在后期的Spark版本中,DataSet有可能会逐步取代RDD和DataFrame成为唯一个API接口
三者的共性
- 三者都是Spark平台的分布式弹性数据集,为处理超大型数据提供便利
- 三者都有惰性机制即:在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,才会开始遍历运算。
- 有许多共同的函数,如filter,sort等
- 三者都会根据 Spark 的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出
- 三者都有partition的概念
- DataFrame 和 DataSet 均可使用模式匹配获取各个字段的值和类型
三者的区别
- RDD不支持sparkSQL操作。
- DataFrame的值不能直接访问,只有通过解析才能获取各个字段的值;DataFrame 与 DataSet 支持一些特别方便的保存方式,比如保存成 csv,可以带上表头,这样每一列的字段名一目了然
- Dataset 和 DataFrame 拥有完全相同的成员函数,区别只是每一行的数据类型不同。