大数据点滴

翻译:Apache Spark : RDD vs DataFra

2018-08-09  本文已影响1人  orisonchan

在Spark 2.0 Release中,官方提供了3种数据抽象结构供使用:RDD,DataFrame and DataSet。

对于新手来说,可能会对理解三种结构间的关系和决定使用不使用哪一种感到迷惑。本文会详细介绍区别。

简要综述

在分开讨论前,来一个简述,三种结构产生顺序如下:

RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)

RDD是最老的从1.0版本就可用的,Dataset是最新的从1.6版本可用的。给定同样数据,三种抽象结构都会计算并得出相同的结果给用户。但是他们在性能上和计算方式上有所不同。

RDD让我们决定如何做,这限制了Spark在底层处理时的优化,而在处理底层时,dataframe/dataset让我们决定做什么,而把如何计算全部交给了Spark。

让我们花两分钟理解如何做做什么的区别。

相比RDD,Dataframe带来了一个主要的性能提升,同时也带来了一些缺点,这导致Dataset的发展,它是RDD和Dataframe最好的统一。未来,Dataset最终会替代RDD和Dataframe成为Spark用户在编写代码时唯一要考虑的API。让我们逐个来理解。

RDD:

Dataframe:

Dataset:

重点记得无论是Dataset还是Dataframe,内部执行都是用RDD的,但不同的是,用户不用写代码来创建RDD集合也不用控制这些RDD。RDD会在执行计划的最后一步,在优化以后生成。这是文章开头说的,RDD让我们决定如何做,dataframe/dataset让我们决定做什么

所有这些优化都是可行的因为数据是结构化的并且Spark事先知道数据的schema。所以它可以使用所有很棒的特性如tungsten非堆二进制内存自定义管理,catalyst优化器和encoders来获取性能提升,在在只使用RDD的情况下是不可能实现的。

结论:

简而言之,Spark将非结构化计算移至结构化计算因为这样可以允许多种性能优化。Dataframe是结构化计算的第一步,但是缺乏友好。最终Dataset统一了Dataframe和RDD,带来了最好的抽象结构。走在前面的开发者只需要考虑Dataset因为Dataframe和RDD不推荐使用。

上一篇 下一篇

猜你喜欢

热点阅读