在 SparkSQL
中
Spark
为我们提供了两个新的抽象,分别是
DataFrame
和
DataSet
。他们
中
Spark
为我们提供了两个新的抽象,分别是
DataFrame
和
DataSet
。他们
和
RDD
有什么区别呢?
RDD
有什么区别呢?
首先从版本的产生上来看:
Spark1.0 => RDD
Spark1.3 => DataFrame
Spark1.6 => Dataset
如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不
同是的他们的执行效率和执行方式。在后期的
Spark
版本中,
DataSet
有可能会逐步取代
RDD
Spark
版本中,
DataSet
有可能会逐步取代
RDD
【
三者的共性 】
三者的共性 】
1、三者都有惰性机制,在进行创建、转换,如
map
方法时,不会立即执行,只有在遇到 Action如
foreach
时,三者才会开始遍历运算
;
map
方法时,不会立即执行,只有在遇到 Action如
foreach
时,三者才会开始遍历运算
;
2、三者有许多共同的函数,如
filter
,排序等
;
filter
,排序等
;
3、在对
DataFrame
和
Dataset
进行操作许多操作都需要这个包
:
import spark.implicits._
(在 创建好 SparkSession
对象后尽量直接导入)
DataFrame
和
Dataset
进行操作许多操作都需要这个包
:
import spark.implicits._
(在 创建好 SparkSession
对象后尽量直接导入)
5、
三者都有
partition
的概念。
三者都有
partition
的概念。
6、DataFrame
和
DataSet
均可使用模式匹配获取各个字段的值和类型
和
DataSet
均可使用模式匹配获取各个字段的值和类型
【三者的区别】
1、RDD
➢
RDD
一般和
spark mllib
同时使用
RDD
一般和
spark mllib
同时使用
➢
RDD
不支持
sparksql
操作
RDD
不支持
sparksql
操作
2、 DataFrame
➢
与
RDD
和
Dataset
不同,
DataFrame
每一行的类型固定为
Row
,每一列的值没法直 接访问,只有通过解析才能获取各个字段的值
与
RDD
和
Dataset
不同,
DataFrame
每一行的类型固定为
Row
,每一列的值没法直 接访问,只有通过解析才能获取各个字段的值
➢
DataFrame
与
DataSet
一般不与
spark mllib
同时使用
DataFrame
与
DataSet
一般不与
spark mllib
同时使用
➢
DataFrame
与
DataSet
均支持
SparkSQL
的操作,比如
select
,
groupby
之类,还能 注册临时表/
视窗,进行
sql
语句操作
DataFrame
与
DataSet
均支持
SparkSQL
的操作,比如
select
,
groupby
之类,还能 注册临时表/
视窗,进行
sql
语句操作
➢
DataFrame
与
DataSet
支持一些特别方便的保存方式,比如保存成
csv
,可以带上表 头,这样每一列的字段名一目了然(
后面专门讲解
)
DataFrame
与
DataSet
支持一些特别方便的保存方式,比如保存成
csv
,可以带上表 头,这样每一列的字段名一目了然(
后面专门讲解
)
3)、DataSet
➢
Dataset
和
DataFrame
拥有完全相同的成员函数,区别只是每一行的数据类型不同DataFrame 其实就是
DataSet
的一个特例
type DataFrame = Dataset[Row]
Dataset
和
DataFrame
拥有完全相同的成员函数,区别只是每一行的数据类型不同DataFrame 其实就是
DataSet
的一个特例
type DataFrame = Dataset[Row]
➢
DataFrame
也可以叫
Dataset[Row],
每一行的类型是
Row
,不解析,每一行究竟有哪 些字段,各个字段又是什么类型都无从得知,只能用上面提到的 getAS
方法或者共性中的第七条提到的模匹配拿出特定字段。而 Dataset
中,每一行是什么类型是 不一定的,在自定义了 case class
之后可以很自由的获得每一行的信息。
DataFrame
也可以叫
Dataset[Row],
每一行的类型是
Row
,不解析,每一行究竟有哪 些字段,各个字段又是什么类型都无从得知,只能用上面提到的 getAS
方法或者共性中的第七条提到的模匹配拿出特定字段。而 Dataset
中,每一行是什么类型是 不一定的,在自定义了 case class
之后可以很自由的获得每一行的信息。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/1501.html