Spark系列--SparkSQL(二)RDD、DataFrame、DataSet

本文详细介绍了Spark中的RDD、DataFrame和DataSet的概述、共性和区别。RDD作为Spark早期的数据抽象,简单易用但性能有限。DataFrame提供了schema,类似于数据库表格,性能优于RDD,支持SQL操作。DataSet是DataFrame的扩展,具有类型安全和查询优化特性。三者都是惰性执行,共享数据缓存,支持分区和共有的函数。DataFrame和DataSet更适用于大规模数据处理和SQL操作,而RDD适合简单操作。
摘要由CSDN通过智能技术生成

前言

在SparkCore中我们知道数据抽象是RDD,在SparkSQL中Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:
RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)
如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。

在后期的Spark版本中,DataSet会逐步取代RDD和DataFrame成为唯一的API接口。

接下来将概述三者,并分析他们之间的共性和区别。

一、三者概述

1、RDD

  • RDD是一个懒执行的不可变的可以支持Lambda表达式的并行数据集合。
  • RDD的最大好处就是简单,API的人性化程度很高。
  • RDD的劣势是性能限制,它是一个JVM驻内存对象,这也就决定了存在GC的限制和数据增加时Java序列化成本的升高。

2、DataFrame

与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验。

这里写图片描述

上图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。

RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化,比如filter下推、裁剪等。

DataFrame是为数据提供了Schema的视图。可以把它当做数据库中的一张表来对待,DataFrame也是懒执行的

性能上比RDD要高,主要有两方面原因

  • 定制化

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值