下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

数据库技术:RDD和DataFrame和DataSet三者间的区别

作者:知晓的老巢     来源: 博客园点击数:1682发布时间: 2020-05-14 11:37:57

标签: 数据库数据库技术数据结构

  RDD(ResilientDistributedDatasets),弹性分布式数据集,是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和groupby)而创建,然而这些限制使得实现容错的开销很低。

  对开发者而言,RDD可以看作是Spark的一个对象,它本身运行于内存中,如读文件是一个RDD,对文件计算是一个RDD,结果集也是一个RDD,不同的分片、数据之间的依赖、key-value类型的map数据都可以看做RDD。

  DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。

  所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。

  RDD和DataFrame和DataSet三者间的区别

数据库技术:RDD和DataFrame和DataSet三者间的区别_数据库_数据库技术_数据结构_课课家

  在SparkSQL中Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:

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

  如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。

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

  RDD是只读的、分区记录的集合。RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。这些确定性操作称之为转换,如map、filter、groupBy、join(转换不是程开发人员在RDD上执行的操作)。

  RDD不需要物化。RDD含有如何从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage),据此可以从物理存储的数据计算出相应的RDD分区。

  RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个ChildRDD的一个分区使用,则称之为narrowdependency;若多个ChildRDD分区都可以依赖,则称之为widedependency。不同的操作依据其特性,可能会产生不同的依赖。例如map操作会产生narrowdependency,而join操作则产生widedependency。

  弹性分布式数据集(RDD,ResilientDistributedDatasets),它具备像MapReduce等数据流模型的容错特性,并且允许开发人员在大型集群上执行基于内存的计算。

  现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见;二是交互式数据挖掘工具。这两种情况下,将数据保存在内存中能够极大地提高性能。

  为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RDD上的批量操作来创建。尽管如此,RDD仍然足以表示很多类型的计算,包括MapReduce和专用的迭代编程模型(如Pregel)等。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程