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,但是未来会加入。 三者之间的转换:
