RDD和DataFrame和Dataset比较

来源:互联网 发布:python 累积分布图 编辑:程序博客网 时间:2024/05/15 13:55

一 SparkSQL简介

Spark SQL是一个能够利用Spark进行结构化数据的存储和操作的组件,结构化数据可以来自外部结构化数据源也可以通过RDD获取。

外部的结构化数据源包括Hive,JSON,Parquet,RMDBS等。当前Spark SQL使用Catalyst优化器来对SQL进行优化,从而得到更加高效的执行方案。并且可以将结果存储到外部系统。

 

二 DataFrame & Dataset介绍

2.1DataFrame 介绍

DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据块中的表,它与RDD最主要的区别在于:DataFrame有schema元数据,即DataFrame所表示的数据集的每一列都有名称和数据类型。正是因为有了这些schema元数据,Sparl SQL的查询优化器就可以进行针对性的优化

 

2.2 Dataset介绍

Dataset也是一种分布式数据集,可以使用map,flatmap等函数进行转换,DataFrame是一个Dataset的特例,等价于Dataset[Row]; Dataset的操作分为transformation和action 两种,transformation用于创建新的Dataset,而action用于计算操作;它和RDD一样具有惰性,只有action操作被调用的时候才会进行计算;DataSet创立需要一个显式的Encoder,把对象序列化为二进制

 

三 RDD、DataFrame、Dataset之间的比较

3.1 相同点

#  RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集

# 三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行。只有在执行action操作的时候,才会进行计算。

 

3.2 不同点

3.2.1 RDD和 DataFrame的比较

# 前者没有schema信息;后者有schema信息

# RDD无法得知所存的数据元素的具体内部结构,Spark Core只能在stage层面进行简单的优化;后者因为有schema信息,Sparl SQL的查询优化器就可以进行针对性的优化

# RDD通过函数式调用API,虽然简洁明了,但是需要创建新的对象,不容易重用旧的对象,给GC带来挑战;DataFrame是尽可能的重用对象

 

3.2.2 DataFrame和 Dataset的比较

# DataFrame是带有类型的,即需要指定类型;但是DataFrame无需指定类型。DataFrame是一个Dataset的特例,等价于Dataset[Row]

# DataFrame带有schema,而DataSet没有schema

原创粉丝点击