SparkSQL 的创建 DataFrame 和 DataSet,和 rdd 的联系

1.1   创建 DataFrame

With a SparkSession, applications can create DataFrames from an existing RDD, from a Hive table, or from Spark data sources.

有了 SparkSession 之后, 通过 SparkSession有 3 种方式来创建DataFrame:

1、通过 Spark 的数据源创建

2、通过已知的 RDD 来创建

3、通过查询一个 Hive 表来创建.

 

 

 

1.2   创建DataSet

1、使用样例类的序列得到DataSet

2、使用基本类型的序列得到 DataSet

3、在实际使用的时候, 很少用到把序列转换成 DataSet, 更多的是通过RDD来得到DataSet

 

 

1.3 RDD, DataFrame和 DataSet 之间的关系

  1. RDD、DataFrame、Dataset全都是 Spark 平台下的分布式弹性数据集,为处理超大型数据提供便利
  2. 三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算。
  3. 三者都会根据 Spark 的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出
  4. 三者都有partition的概念
  5. 三者有许多共同的函数,如map, filter,排序等
  6. 在对 DataFrame和Dataset进行操作许多操作都需要这个包进行支持 import spark.implicits._
  7. DataFrame和Dataset均可使用模式匹配获取各个字段的值和类型

 

1.4   三者的区别

  1.4.1 RDD
  1. RDD一般和spark mlib同时使用
  2. RDD不支持sparksql操作
  1.4.2 DataFrame
  1. 与RDD和Dataset不同,DataFrame每一行的类型固定为Row,每一列的值没法直接访问,只有通过解析才能获取各个字段的值,
  2. DataFrame与DataSet一般不与 spark mlib 同时使用
  3. DataFrame与DataSet均支持 SparkSQL 的操作,比如select,groupby之类,还能注册临时表/视窗,进行 sql 语句操作
  4. DataFrame与DataSet支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然(后面专门讲解)
  1.4.3  DataSet
  1. Dataset和DataFrame拥有完全相同的成员函数,区别只是每一行的数据类型不同。 DataFrame其实就是DataSet的一个特例
  2. DataFrame也可以叫Dataset[Row],每一行的类型是Row,不解析,每一行究竟有哪些字段,各个字段又是什么类型都无从得知,只能用上面提到的getAS方法或者共性中的第七条提到的模式匹配拿出特定字段。而Dataset中,每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获得每一行的信息

 

 

 

 

 

 

 

RDD, DataFrame和 DataSet 之间的转换

 

 

posted @   xingmeng1  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示