RDDDataFrameDataSet三者的关系

导读:本篇文章讲解 RDDDataFrameDataSet三者的关系,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

        在 SparkSQL

Spark
为我们提供了两个新的抽象,分别是
DataFrame

DataSet
。他们

RDD
有什么区别呢?
首先从版本的产生上来看:
Spark1.0 => RDD
Spark1.3 => DataFrame
Spark1.6 => Dataset
        如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不
同是的他们的执行效率和执行方式。在后期的
Spark
版本中,
DataSet
有可能会逐步取代
RDD

DataFrame
成为唯一的
API
接口
        

三者的共性
RDD

DataFrame

DataSet
全都是
spark
平台下的分布式弹性数据集,为处理超大型数 据提供便利;
1、三者都有惰性机制,在进行创建、转换,如
map
方法时,不会立即执行,只有在遇到 Action如
foreach
时,三者才会开始遍历运算
;
2、三者有许多共同的函数,如
filter
,排序等
;
3、在对
DataFrame

Dataset
进行操作许多操作都需要这个包
:
import spark.implicits._
(在 创建好 SparkSession
对象后尽量直接导入)
4、三者都会根据
Spark
的内存情况自动缓存运算,这样即使数据量很大,也不用担心会 内存溢出
5、 
三者都有
partition
的概念。
6、DataFrame

DataSet
均可使用模式匹配获取各个字段的值和类型
三者的区别
1、RDD

RDD
一般和
spark mllib
同时使用

RDD
不支持
sparksql
操作
2、 DataFrame


RDD

Dataset
不同,
DataFrame
每一行的类型固定为
Row
,每一列的值没法直 接访问,只有通过解析才能获取各个字段的值

DataFrame

DataSet
一般不与
spark mllib
同时使用

DataFrame

DataSet
均支持
SparkSQL
的操作,比如
select

groupby
之类,还能 注册临时表/
视窗,进行
sql
语句操作

DataFrame

DataSet
支持一些特别方便的保存方式,比如保存成
csv
,可以带上表 头,这样每一列的字段名一目了然(
后面专门讲解
)
3)、DataSet

Dataset

DataFrame
拥有完全相同的成员函数,区别只是每一行的数据类型不同DataFrame 其实就是
DataSet
的一个特例
type DataFrame = Dataset[Row]

DataFrame
也可以叫
Dataset[Row],
每一行的类型是
Row
,不解析,每一行究竟有哪 些字段,各个字段又是什么类型都无从得知,只能用上面提到的 getAS
方法或者共性中的第七条提到的模匹配拿出特定字段。而 Dataset
中,每一行是什么类型是 不一定的,在自定义了 case class
之后可以很自由的获得每一行的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1501.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!