RDD、Dataframe、Dataset的异同

1. 三者之间的关系

DataFrame是特殊的RDD(它相当于RDD+schema,即RDD+表信息),可以将他看成数据库中的一张数据表,但是只知道这个"表"中的各个字段,不知道各个字段的数据类型。
Dataset是DataFrame的父类,当Dataset中存储Row(Row是一个类型,跟Car、Person这些的类型一样,所有的表结构信息我都用Row来表示)时,两者等价(Dataset[Row]=DataFrame)。

2. 各自优缺点

2.1 RDD

优点:
编译时类型安全:编译时就能检查出类型错误;
面向对象的编程风格:直接通过对象调用方法的形式来操作数据

缺点:
序列化和反序列化的性能开销大:无论是集群的通信,还是IO操作,都需要对对象的结构和数据进行序列化和反序列化。
GC(垃圾回收)的性能开销大:频繁的创建和销毁对象,增加了GC的负担。

2.2 DataFrame

优点:DataFrame通过引入schema (即数据的结构信息)和off-heap(不在堆里面的内存,使用操作系统上的内存), Spark通过schame就能够读懂数据, 因此在通信和IO时就只需要序列化和反序列化数据, 而结构的部分就可以省略了;通过off-heap引入,可以快速的操作数据,避免大量的GC。

缺点:DataFrame不是类型安全的, API也不是面向对象风格的。

2.3 DataSet

Dataset兼容了RDD和DataFrame的优点,使用在以后的spark中,Dataset将会逐步代替RDD和DataFrame的使用。

参考:

https://blog.csdn.net/weixin_38613375/article/details/89500160

你可能感兴趣的:(RDD、Dataframe、Dataset的异同)