在很多人眼里,RDD是老派,而Spark 2.1用Dataframe会更快。然而,许多人没有意识到数据帧是基于RDD的。我们可以试着打开引擎盖,看看里面是如何工作的。
在Spark中,DataFrame是由命名列组织的分布式数据集,相当于关系数据库中的一个表和R/Python中的数据帧(但优化更多)。RDD是一个分布式数据集,数据分散在分布式集群中的每台机器上。
下图显示了它们之间的结构比较。
左边的RDD·[人]将Person作为类型参数,但是Spark框架本身并不理解Person类的内部结构。但是,右侧的数据框提供了详细的结构信息,因此Spark SQL可以清楚地知道数据集中包含哪些列,以及每列的名称和类型。数据帧有更多的数据结构信息(模式)。
数据框架比RDD更有效,因为它指定了一个特定的结构来约束数据。因为数据帧具有定义明确的结构,所以Spark可以在作业运行中应用许多性能增强方法。如果你能用RDD完美地写程序,你也可以通过RDD达到同样的表现。数据框架是基于RDD的抽象。如果你花时间设计算法和写代码,你也可以使用RDD获得类似于数据帧的速度,甚至更快。
Spark SQL中查询计划的各个阶段。圆形矩形代表催化剂树。
数据框的底层结构是RDD。当您使用数据框时,Spark将优化您的代码。如果您编写的代码足够高效,那么您肯定可以获得与RDD相同的性能。然而,要达到与数据帧相同的效率需要付出更多的努力。这就是为什么数据帧更好。你甚至可以使用火花SQL。DataFrame用于在代表每行一条记录的行中存储数据。因此,用户可以在其上运行火花SQL查询。
火花SQL的接口,以及与火花的交互。
Spark将整个查询封装到一个代码块中(他们称之为整个阶段代码生成),这导致了更好的缓存局部性,因为它避免了虚拟调用。
数据帧的优势
与RDD相比,Spark极大地优化了数据帧的执行时间和内存使用。
1.催化剂优化引擎将执行时间减少了75%。
2.项目钨堆外内存管理减少了75%的内存使用,并且没有垃圾收集器。
使用本机Spark Python和Scala应用编程接口编写的聚合的性能与数据框架应用编程接口的性能相比。
两阶段管道的性能,分为单独的火花SQL查询和火花作业(上图)和集成的数据帧作业(下图)。
我们可以看到用python和scala执行RDD明显比DataFrame慢,而scala在执行RDD的时候比Python快。数据框的两种语言没有区别。这是因为Python是一种解释语言,而scala是一种编译语言。为了更好地执行,Catalyst将Scala和python的DataFrame操作编译成物理计划,并生成JVM (Java虚拟机)字节码。所以python不解释过程,导致两种语言性能相同。同时,两种语言的性能比普通Python RDD好4倍,比Scala RDD好2倍。Catalyst优化的代码比解释性代码快得多。
Spark的一贯目标是提供一个单一的平台,用户可以从中获得更好的分布式算法来匹配任何类型的数据处理任务。其中性能一直是主要目标之一,钨的目标是让Spark应用达到硬件性能的极限。
数据帧在时间和空方面明显优于RDD。一般来说,数据帧应该是首选。
结论
Spark SQL是Apache Spark中的一个新模块,它提供了丰富的关系处理集成。Spark SQL通过使用声明性数据框架API来扩展Spark,以允许关系处理,并提供自动优化等优势,以便用户可以编写混合关系和复杂分析的管道。
它支持大规模定制的各种功能数据分析,包括半结构化数据、查询联邦和机器学习数据类型。为了启用这些功能,Spark SQL基于一个名为Catalyst的可扩展优化器,它可以轻松地添加优化规则,并将数据源和数据类型嵌入Scala编程语言。
用户反馈和基准测试表明,火花SQL使编写混合关系和数据流水线程序变得更加简单和高效,同时,与以前的火花上SQL引擎相比,它提供了显著的加速。
12
译者简介
约瑟夫孙。
经常吃加州牛肉面的野码子。
擅长安装卸载virtualbox、MySQL、jupyter笔记本、intellij、eclipse、qvodplayer等软件。
精通拼写C、C++、C#、Java、Python、SQL、Go等单词。
有足够的Windows、Linux、OS X、Android、iOS开关机的实际经验。
对大数据行业有一些不成熟的看法。
翻译:孙若瑟
1.《dataframe Spark用DataFrame取代RDD以提高性能》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《dataframe Spark用DataFrame取代RDD以提高性能》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/819468.html