RDDDFDS的区别与联系
Posted yanxun1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RDDDFDS的区别与联系相关的知识,希望对你有一定的参考价值。
RDD.DataFrame.DataSet的区别和联系
共性:
1)都是spark中得弹性分布式数据集,轻量级
2)都是惰性机制,延迟计算
3)根据内存情况,自动缓存,加快计算速度
4)都有partition分区概念
5)众多相同得算子:map flatmap 等等
区别:
1)RDD不支持SQL
2)DF每一行都是Row类型,不能直接访问字段,必须解析才行
3)DS每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获 得每一行的信息
4)DataFrame与Dataset均支持spark sql的操作,比如select,group by之类,还 能注册临时表/视窗,进行sql语句操作
5)可以看出,Dataset在需要访问列中的某个字段时是非常方便的,然而,如果要 写一些适配性很强的函数时,如果使用Dataset,行的类型又不确定,可能是 各种case class,无法实现适配,这时候用DataFrame即Dataset[Row]就能比较 好的解决问题。
转化:
1)DF/DS转RDD
- Val Rdd = DF/DS.rdd
2) DS/RDD转DF
- import spark.implicits._
- 调用 toDF(就是把一行数据封装成row类型)
3)RDD转DS
将RDD的每一行封装成样例类,再调用toDS方法
4)DF转DS
根据row字段定义样例类,再调用asDS方法[样例类]
特别注意:
在使用一些特殊的操作时,一定要加上 import spark.implicits._ 不然toDF、toDS无法使用
以上是关于RDDDFDS的区别与联系的主要内容,如果未能解决你的问题,请参考以下文章
UDP和TCP协议之间的联系与区别及他们与IP协议的联系是啥?要详细的