【大数据学习 | Spark-SQL】关于RDD、DataFrame、Dataset对象

[复制链接]
发表于 2025-12-17 01:36:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1. 概念:

RDD:
弹性分布式数据集;
DataFrame:
DataFrame是一种以RDD为根本的分布式数据集,雷同于传统数据库中的二维表格。带有schema元信息,即DataFrame所表现的二维表数据集的每一列都带著名称和范例。如许的数据集可以用SQL查询。DataFrame是不可变的,即一旦创建,就不能修改其内容。

DataFrame 是 DataSet[Row]
DataSet:
简朴的说,DataSet和DataFrame的区别就是,DataSet会在编译阶段就举行范例查抄 ,而DataFrame在运行阶段才会范例查抄。
Dataset是一个强范例的特定范畴的对象,Dataset也被称为DataFrame的范例化视图,这种DataFrame是Row范例的Dataset,即Dataset[Row]。Dataset团结了DataFrame的优化和RDD的范例安全。Dataset提供了编译时范例查抄(而DataFrame不会,DataFrame只会在运行阶段才会查抄范例),确保数据在编译阶段就符合预期的范例。
dataset是dataFrame的升级版对象,dataframe是一个传统的sql编程对象,如果要想利用dataframe举行机动开发的比力复杂。

dataset和dataFrame是一个种别的对象,都是可以举行sql查询数据的,而且可以支持rdd上面的方法。
当我们必要对一个表对象举行二次处置处罚的话发起各人转换为dataset而不是dataframe。
  1. package com.hainiu.spark
  2. import org.apache.spark.sql.{Dataset, SparkSession}
  3. object TestDSAndDF {
  4.   def main(args: Array[String]): Unit = {
  5.     val session = SparkSession.builder().master("local[*]").appName("test").getOrCreate()
  6.     import session.implicits._
  7.     val ds: Dataset[String] = session.read.textFile("file:///headless/workspace/spark/data/a.txt")
  8.     ds.map(t=>{
  9.       val strs = t.split(" ")
  10.       (strs(0), strs(1), strs(2), strs(3))
  11.     })
  12. //    val df = session.read.format("org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2")
  13. //      .load("file:///headless/workspace/spark/data/a.txt")
  14. //   
  15. //    val ds: Dataset[(String, String, String, String)] = df.map(row => {
  16. //      val line = row.getAs[String]("value")
  17. //      val strs = line.split(" ")
  18. //      (strs(0), strs(1), strs(2), strs(3))
  19. //    })
  20.   }
  21. }
复制代码
2. 三者之间的转换
  1.   val ds: Dataset[String] = session.read.textFile("file:///headless/workspace/spark/data/a.txt")
  2.     ds.map(t=>{
  3.       val strs = t.split(" ")
  4.       (strs(0), strs(1), strs(2), strs(3))
  5.     })
  6.     val df1 = ds.toDF("id","name","age","gender")
  7.     val df: Dataset[Row] = session.read.format("org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2")
  8.       .load("file:///headless/workspace/spark/data/a.txt")
  9.     val rdd = session.sparkContext.textFile("file:///headless/workspace/spark/data/a.txt")
  10.     rdd.toDS()
  11.     rdd.toDF()
  12.     df.rdd
  13.     ds.rdd
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表