首页技术文章正文

DataFrame是什么?与RDD有什么区别?

更新时间:2021-03-23 来源:黑马程序员 浏览量:

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

1616470817236_DataFrame与RDD区别.jpg

DataFrame与RDD区别

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

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

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



猜你喜欢:

YARN的体系结构的工作流程是怎样的?

RDD如何分区,各种模式下的分区数目是怎样的?

Hadoop生态体系有哪些子系统?    

RDD数据丢失后如何恢复?RDD容错机制介绍

黑马程序员大数据开发培训班

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