首页技术文章正文

DataFrame与RDD有什么区别?

更新时间:2022年12月22日 15时28分19秒 来源:黑马程序员

Spark SQL使用的数据抽象并非是RDD,而是DataFrame。在Spark 1.3.0版本之前,DataFrame被称为SchemaRDD。DataFrame使Spark具备了处理大规模结构化数据的能力。在Spark中,DataFrame是一种以RDD为基础的分布式数据集,因此DataFrame可以完成RDD的绝大多数功能,在开发使用时,也可以调用方法将RDD和DataFrame进行相互转换。DataFrame的结构类似于传统数据库的二维表格,并且可以从很多数据源中创建如结构化文件、外部数据库、Hive表等数据源。下面,通过下图来了解DataFrame与RDD在结构上的区别。

在图中,左侧为RDD[Person]数据集,右侧是Dataframe数据集。DataFrame可以看作是分布式的Row对象的集合,在二维表数据集的每一列都带有名称和类型,这就是Schema元信息,这使得Spark框架可以获取更多的数据结构信息,从而对在DataFrame背后的数据源以及作用于Dataframe上数据变换进行针对性的优化,最终达到大幅提升计算效率的目的;同时,DataFrame与Hive类似,支持嵌套数据类型(如Struct、Array、Map)。

DataFrame与RDD的区别

RDD是分布式的Java对象的集合,如图中的RDD[Person]数据集,虽然它以Person为类型参数,但是对象内部之间的结构相对于Spark框架本身是无法得知的,这样在转换数据形式时效率相对较低。

总的来说,DataFrame除了提供比RDD更丰富的算子以外,更重要的特点是提升Spark框架执行效率、减少数据读取时间以及优化执行计划。有了DataFrame这个更高层次的抽象后,处理数据就更加简单了,甚至可以直接用SQL来处理数据,这对于开发者来说,易用性有了很大的提升。不仅如此,通过DataFrame API或SQL处理数据时,Spark优化器(Catalyst)会自动优化代码,即使写的程序或SQL不高效,程序也可以高效地执行。


猜你喜欢

Mapreduce工作原理介绍

大数据算法:计算找出热搜关键词

RDD是什么有哪些特征?

黑马程序员大数据培训课程

分享到:
在线咨询 我要报名
和我们在线交谈!