Spark原理用法Spark认知学习spark

再谈RDD、DataFrame、DataSet关系以及相互转换(

2017-10-24  本文已影响660人  shohokuooo

Spark提供了三种主要的与数据相关的API:

三者图示

下面详细介绍下各自的特点:

RDD

主要描述:RDD是Spark提供的最主要的一个抽象概念(Resilient Distributed Dataset),它是一个element的collection,分区化的位于集群的节点中,支持并行处理。

DataFrame

Spark从1.3版本开始引入Dataframe,它克服了RDD的最主要的挑战。

主要描述:Dataframe是一个分布式的数据collection,而且将数据按照列名进行组织。在概念上它与关系型的数据库的表或者R/Python语言中的DataFrame类似。与之一起提供的还有,Spark引入了catalyst优化器,它可以优化查询。

DataSet

主要描述:Dataset API是对DataFrame的一个扩展,使得可以支持类型安全的检查,并且对类结构的对象支持程序接口。它是强类型的,不可变collection,并映射成一个相关的schema。
Dataset API的核心是一个被称为Encoder的概念。它是负责对JVM的对象以及表格化的表达(tabular representation)之间的相互转化。
表格化的表达在存储时使用了Spark内置的Tungsten二进制形式,允许对序列化数据操作并改进了内存使用。在Spark 1.6版本之后,支持自动化生成Encoder,可以对广泛的primitive类型(比如String,Integer,Long等)、Scala的case class以及Java Bean自动生成对应的Encoder。

Java API中三种数据格式的相互转换

首先构造一个数据集,是由Person类的结构组成的,然后在此之上看这三个API实例的构造以及相互转换

Person类的定义 数据创建

总结:
其实RDD的Map和Dataset的Map只有一点不同,就是Dataset的Map要指定一个Encoder的参数。

需要用Encoder类给出
上一篇 下一篇

猜你喜欢

热点阅读