热线电话:13121318867

登录
2018-10-21 阅读量: 1070
Spark RDD、DataFrame和DataSet的区别

RDD

优点:

1. 编译时类型安全,编译时就能检查出类型错误

2. 面向对象的编程风格,直接通过类名点的方式来操作数据

缺点:

1. 序列化和反序列化的性能开销,无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化.

2. GC的性能开销,频繁的创建和销毁对象, 势必会增加GC

DataFrame

DataFrame引入了schema和off-heap

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

• off-heap : 意味着JVM堆以外的内存, 这些内存直接受操作系统管理(而不是JVM)。Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中, 当要操作数据时, 就直接操作off-heap内存. 由于Spark理解schema, 所以知道该如何操作。

off-heap就像地盘, schema就像地图, Spark有地图又有自己地盘了, 就可以自己说了算了, 不再受JVM的限制, 也就不再收GC的困扰了。

通过schema和off-heap, DataFrame解决了RDD的缺点, 但是却丢了RDD的优点。DataFrame不是类型安全的, API也不是面向对象风格的。

DataSet

DataSet结合了RDD和DataFrame的优点, 并带来的一个新的概念Encoder

当序列化数据时, Encoder产生字节码与off-heap进行交互, 能够达到按需访问数据的效果, 而不用反序列化整个对象. Spark还没有提供自定义Encoder的API, 但是未来会加入.

0.0000
1
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子