zoukankan      html  css  js  c++  java
  • sparkSQL中RDD——DataFrame——DataSet的区别

    spark中RDD、DataFrame、DataSet都是spark的数据集合抽象,RDD针对的是一个个对象,但是DF与DS中针对的是一个个Row

    RDD

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

    缺点:
    序列化和反序列化的性能开销
    无论是集群间的通信,还是IO操作都需要对对象的结构和数据进行序列化和反序列化
    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,但是未来会加入

  • 相关阅读:
    异步加载图片
    彩票项目
    linux 多线程的分离和可链接属性
    C库中system和atexit和exit的使用
    C库中getenv函数
    mode|平均数|方差|标准差|变异系数|四分位数|几何平均数|异众比率|偏态|峰态
    radar chart
    植物基因组|注释版本问题|重测序vs泛基因组
    signals function|KNN|SVM|average linkage|Complete linkage|single linkage
    supervised learning|unsupervised learning
  • 原文地址:https://www.cnblogs.com/xjh713/p/7309507.html
Copyright © 2011-2022 走看看