SparkSQL中 RDD、DataFrame、DataSet三者的区别与联系

RDD

RDD:弹性分布式数据集;不可变、可分区、元素可以并行计算的集合。
优点:
RDD编译时类型安全:编译时能检查出类型错误;
面向对象的编程风格:直接通过类名点的方式操作数据。
缺点:
序列化和反序列化的性能开销很大,大量的网络传输;
构建对象占用了大量的heap堆内存,导致频繁的GC(程序进行GC时,所有任务都是暂停)

DataFrame

DataFrame以RDD为基础的分布式数据集。
优点:
DataFrame带有元数据schema,每一列都带有名称和类型。
DataFrame引入了off-heap,构建对象直接使用操作系统的内存,不会导致频繁GC。
DataFrame可以从很多数据源构建;
DataFrame把内部元素看成Row对象,表示一行行的数据。
DataFrame=RDD+schema
缺点:
编译时类型不安全;
不具有面向对象编程的风格。

Dataset

DataSet包含了DataFrame的功能,Spark2.0中两者统一,DataFrame表示为DataSet[Row],即DataSet的子集。
(1)DataSet可以在编译时检查类型;
(2)并且是面向对象的编程接口。
(DataSet 结合了 RDD 和 DataFrame 的优点,并带来的一个新的概念 Encoder。当序列化数据时,Encoder 产生字节码与 off-heap 进行交互,能够达到按需访问数据的效果,而不用反序列化整个对象。)。
三者之间的转换:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章