DataFrame是什么, DataFrame和RDD的区别, DataFrame和RDD优缺点 19

1. 什么是DataFrame

  • DataFrame的前身是SchemaRDD, 从Spark 1.3.0开始SchemaRDD更名为DataFrame.
  • 与SchemaRDD的主要区别是: DataFrame不再直接继承自RDD, 而是自己实现了RDD的绝大多数功能.但仍旧可以在DataFrame上调用RDD方法将其转换为一个RDD
  • DataFrame是一种以RDD为基础的分布式数据集, 类似于传统数据库的二维表格, DataFrame带有Schema元信息, 即DataFrame所表示的二维表数据集的每一列都带有名称和类型, 但底层做了更多的优化.
  • DataFrame可以从很多数据源构建, 比如: 已存在的RDD, 结构化文件, 外部数据库, Hive表.

2. DataFrame与RDD的区别

  • RDD可以看做分布式的对象的集合, Spark并不知道对象的详细模式信息.
  • DataFrame可以看做分布式的Row对象的集合, 其提供了由列组成的详细模式信息, 使得Spark SQL可以进行某些形式的执行优化.

DataFrame和普通RDD的逻辑架构区别如下图所示:
在这里插入图片描述

  • 左侧的**RDD[Person]**虽然以Person为类型参数, 但Spark框架本身不了解Person类的内部结构.
  • 右侧的DataFrame却提供了详细的结构信息, 使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么.DataFrame多了数据的结构信息, 即Schema. 这样看起来就像一张表.
  • DataFrame还配套了新的操作数据的方法, DataFrame API(如df.select())和SQL(select id, name from xx_table where…)
  • DataFrame还引入了off-heap, 意味着JVM堆以外的内存, 这些内存直接受操作系统管理(而不是JVM). Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中,当要操作数据时, 就直接操作off-heap内存. 由于Spark理解Schema, 所以知道该如何操作.
  • RDD是分布式的Java对象集合. DataFrame是分布式的Row对象集合. DataFrame除了提供了比RDD更丰富的算子以为, 更重要的特点是提升执行效率, 减少数据读取以及执行计划的优化.
  • 通过DataFrame APISQL处理数据, 会自动经过**Spark优化器(Catalyst)**的优化,即使程序或sql不高效, 也可以运行的很快.

3. DataFrame与RDD的优缺点

3.1 RDD的优缺点

  • 优点
    1. 编译时类型安全, 编译时就能检查出类型错误
    2. 面向对象的编程风格, 直接通过对象调用方法的形式来操作数据.
  • 缺点
    1. 序列化和反序列化的性能开销, 无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化.
    2. GC的性能开销, 频繁的创建和销毁对象,势必会增加GC

3.2 DataFrame的优缺点

优点:

  • DataFrame通过引入schema和off-heap(不在堆里面的内存,指的是除了不在堆的内存,使用操作系统上的内存)
  • Spark通过schame就能够读懂数据, 因此在通信和IO时就只需要序列化和反序列化数据, 而结构的部分就可以省略了;通过off-heap引入,可以快速的操作数据,避免大量的GC。
    以上两点解决RDD频繁浪费GC的缺点.
    缺点:
  • 但是却丢了RDD的优点,DataFrame不是类型安全的.
  • API也不是面向对象风格的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值