您的位置:首页 > 运维架构 > Apache

Apache Spark APIs 的三剑客,RDDs, DataFrames, and Datasets

2018-03-03 21:14 585 查看
原文链接

罗干翻译

在软件开发者(码农)眼中,没有什么比直接调API更爽的了,因为这更加简单,高效(高产的码农),)符合人类的直觉,和更有说服力.spark之所以吸引开发者的注意力,主要因为它能提供易于使用的API,来处理大规模数据,无论采用scala,python,还是java.

在这篇文章中我们讨论三种API,分别是RDDs, DataFrames, and Datasets,在 Spark 2.2 及更高版本中这三个API都可以使用,我们将说明在不同的情况下,采用何种API及其原因,勾勒出不同API的性能和特点,并指明在何种场景下应使用何种API,我将重点讨论DataFrames and Datasets,因为在Apache Spark 2.0中,这两个是通用API.

我们的初衷是用最少的概念,最简洁的的方式去理解spark,并且提供处理结构化数据的方法,通过这种结构,spark 可以提供更高层次抽象的API

1. 弹性分布式数据集合(RDD)

RDD 是spark用户最先使用的API,RDD的核心是一个无序的分布集合

自spark概念提出以来,RDD是Spark中面向用户的主要API。 RDD核心内容是数据元素的无序分布式集合,分布在集群中的节点上,可以与提供低级API转换和并行操作。

何时使用RDD

考虑如下场景:

你需要对你的数据集进行低级转换和控制;
你的数据是非结构化的,例如媒体流或文本流;
你想用函数式性编程来处理你的数据,而不是域特定的表达式;
您不关心在按名称或列处理或访问数据属性时施加模式(如柱状格式);
您可以放弃如DataFrame和Datasets所具有的结构化和半结构化数据的性能优势。


RDD 在Apache Spark 2.0 有哪些改变?

你可能会问:RDD是否被降级为二等公民? 他们是否被弃用?

答案是一个响亮的否!

更重要的是,您可以在下面注意到,通过简单的API方法调用,您可以随意在DataFrame或Dataset和RDD之间移动 或者将DataFrame和Datasets建立在RDD之上。

1. DataFrames

像RDD一样,DataFrame是一个不可变的分布式数据集合。 与RDD不同,数据被组织到命名列中,就像关系数据库中的表一样。 DataFrame旨在使大型数据集的处理更加容易,允许开发人员将结构强加到分布式数据集上,从而实现更高级别的抽象; 它提供了一个特定于领域的语言API来操纵分布式数据; 并使Spark不仅影响专业数据工程师更影响更广泛的受众群体.

在我们对Apache Spark 2.0网络研讨会和后续博客的预览中,我们提到在Spark 2.0中,DataFrame API将与Datasets API合并,统一跨库的数据处理功能。 由于这种统一,开发人员现在有更少的概念要学习或记忆,并且使用一个名为Dataset的高级别和类型安全的API。



1. Datasets

从Spark 2.0开始,Dataset具有两种截然不同的API特性:强类型API和无类型API,如下表所示。 从概念上讲,将DataFrame视为通用对象Dataset [Row]的集合的别名,其中Row是通用的非类型化JVM对象。 相比之下,数据集是强类型JVM对象的集合,由您在Scala中定义的案例类或Java中的类指定。



未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: