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

1 ) RDD

优点:
编译时类型安全
编译时就能检查出类型错误
面向对象的编程风格
直接通过类名点的方式来操作数据
缺点:
序列化和反序列化的性能开销
无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化。
GC的性能开销 ,频繁的创建和销毁对象, 势必会增加GC


2 2 ) DataFrame

DataFrame引入了schema和off-heap
schema : RDD每一行的数据, 结构都是一样的,这个结构就存储在schema中。 Spark通过schema就能够读懂数据,
因此在通信和IO时就只需要序列化和反序列化数据, 而结构的部分就可以省略了。


3 3 ) DataSet

DataSet结合了RDD和DataFrame的优点,并带来的一个新的概念Encoder。
当序列化数据时,Encoder产生字节码与off-heap进行交互,能够达到按需访问数据的效果,而不用反序列化整个
对象。Spark还没有提供自定义Encoder的API,但是未来会加入。
三者之间的转换:

SparkSQL 中 RDD 、 DataFrame 、 DataSet 三者区别与联系_第1张图片

 

你可能感兴趣的:(spark,big,data,java)