Spark的RDD,DataFrame和Dataset

在Spark1.6版本中,试图为RDD,DataFrame提供一个新的实验性接口Dataset api接口,所以从范围来说,下面这张图能表明:

Dataframe是Dataset的row类型。

RDD

是弹性的分布式数据集。

1.懒执行且不可变,支持lambda表达式的并行数据集合

2.面向对象的编程风格,使用对象点的方式操作数据

缺点:

3.集群间的通信,IO操作都需要对对象的结构和数据进行序列化和反序列化。

2.RDD的劣势是性能限制,它是一个JVM驻内存对象,所以存在GC的限制,频繁的创建和销毁对象增加GC。

DataFrame

和RDD类似,Dataframe也是一个分布式数据容器,它是表格型数据结构。它像传统数据库的二维表格,它同样记录数据的结构信息,即schema。同时,DataFrame也是Hive相似,支持嵌套数据类型(struct,array和map)。DataFrame是分布式的Row对象的集合。

1.懒执行,DataFrame为数据提供了Schema(架构)的视图,可以把它当做数据库的一张表来对待。

2.优势:1)定制化内存管理,数据以二进制的方式存在非堆内存,节省了大量空间,并摆脱了GC(垃圾回收)的限制。

    2)优化的执行计划,查询计划通过Spark catalyst(催化剂)optimiser(优化)进行优化。

    3)RDD的每一行的数据和结构都是一样的存储在schema中,spark通过schema能读懂数据。

Dataset

Dataset相比于RDD和Dataframe少了序列化的步骤,Dataset结合了RDD和DataFrame的优点,带来一个新的概念Encoder。

1.是Dataframe api的一个扩展,是Spark最新的数据抽象

2.具有Dataframe的查询优化特性

3.可以使用样例类在Dataset定义数据的结构信息,样例类的每个属性的名称直接映射到Dataset中的字段名称

4.DataFrame是Dataset的特例,Dataframe是Dataset是Row类型,所以可以通过as方法将Dataframe转换为Dataset。

所有表结构信息都用Row来表示。

5.Dataset是强类型的,如有Dataset[Car],Dataset[Person]。

 联系:三者之间的转换

区别:

1.Dataset内部序列化机制和RDD不同,可以不用反序列化整个对象调用对象的方法。

2.Dataset是强类型的,默认有列名“value”,操作上的方法比RDD的要多,RDD上有的算子,Dataset也都有

在Spark1.6中有读取json格式的RDD,在Spark2.0+中只有读取json格式的Dataset

 

posted @ 2020-06-09 17:15  会飞的猪、li  阅读(172)  评论(0编辑  收藏  举报