zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
    【模拟题(63550802...)】解题报告【贪心】【拓扑排序】【找规律】【树相关】
    【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
    IMemoryBufferReference and IMemoryBufferByteAccess
    SoftwareBitmap and BitmapEncoder in Windows.Graphics.Imaging Namespace
    Windows UPnP APIs
    编译Android技术总结
    Windows函数转发器
    Two Ways in Delphi to Get IP Address on Android
    Delphi Call getifaddrs and freeifaddrs on Android
  • 原文地址:https://www.cnblogs.com/zzzzrrrr/p/13073922.html
Copyright © 2011-2022 走看看