当前位置:   article > 正文

RDD、DataSet与DataFrame的相互转换_javardd怎么转为 dataset

javardd怎么转为 dataset

知识点

1.RDD与DataFrame转换

(1)toDF方法:将RDD转换为DataFrame;

  1. ## 创建RDD
  2. val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(List((1, "ww", 20), (2, "ss", 30), (3, "xx", 40)))
  3. ## 指定列名
  4. val df: DataFrame = rdd.toDF("id", "name", "age")
  5. ## 不指定列名
  6. val df1: DataFrame = rdd.toDF()
  7. ## 展示
  8. df.show()
  9. df1.show()

(2)rdd方法:将DataFrame转换为RDD。

  1. val rowRDD: RDD[Row] = df.rdd
  2. ## 输出
  3. rowRDD.collect().foreach(println)

2.DataFrame与DataSet转换

(1)as方法:将DataFrame转换为DataSet,使用 as[] 方法时需要指明数据类型或者采用样例类的方式;

  1. ## 引入隐式转换
  2. import spark.implicits._
  3. ## 创建样例类(不能创建于main方法中)
  4. case class User(id:Int,name:String,age:Int)
  5. ## 指定数据类型
  6. val ds: Dataset[(Int,String,Int)] = df.as[(Int,String,Int)]
  7. ## 采用样例类
  8. val ds1: Dataset[User] = df.as[User]
  9. ## 展示
  10. ds.show()
  11. ds1.show()

(2)toDF方法:将DataSet转换为DataFrame。

  1. ## 转换
  2. val df2: DataFrame = ds.toDF()
  3. ## 展示
  4. df2.show()

3.RDD与DataSet转换

(1)toDS方法:将RDD转换为DataSet,使用 toDS() 方法时可以先将数据包装为样例类的形式也可以直接以数据类型输出;

  1. ## 通过case将样例类User与数据进行匹配
  2. val ds2: Dataset[User] = rdd.map {
  3. case (id, name, age) => {
  4. User(id, name, age)
  5. }
  6. }.toDS()
  7. ## 直接转换
  8. val ds3: Dataset[(Int, String, Int)]rdd.toDS()
  9. ## 展示
  10. ds2.show()
  11. ds3.show()

(2)rdd方法:将DataSet转换为RDD

  1. ## 转换
  2. val userRDD: RDD[User] = ds1.rdd
  3. ## 输出
  4. userRDD.collect().foreach(println)

编程要求

  • DD 转换成 DataFrame、Dataset: 1、读取list数据创建 RDD; 2、将 RDD转换为 DataFrame,并指定列名为("id","name","sex","age"); 3、将 RDD转换为 DataSet,并以样例类的方式转换。

  • DataFrame 转换成 RDD、DataSet: 1、读取staff.josn文件创建 DataFrame; 2、将 DataFrame转换为 RDD; 3、将 DataFrame转换为 DataSet。

  • DataSet 转换成 RDD、DataFrame: 1、读取staff2.json文件创建 DataSet,并以Staff样例类的方法创建; 2、将 DataSet转换为 DataFrame; 3、将 DataSet转换为 RDD。

  1. import org.apache.spark.rdd.RDD
  2. import org.apache.spark.{SparkConf, sql}
  3. import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
  4. object sparkSql_transform {
  5. case class Message()
  6. def main(args: Array[String]): Unit = {
  7. val sparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSQL")
  8. val spark =SparkSession.builder().config(sparkConf).getOrCreate()
  9. import spark.implicits._
  10. val list = List((202201, "Mark", "female", 23), (202202, "Peter", "female", 24), (202203, "Anna", "male", 21))
  11. val path1 = "/data/workspace/myshixun/step1/data/staff.json"
  12. val path2 = "/data/workspace/myshixun/step1/data/staff2.json"
  13. /********* Begin *********/
  14. /********* RDD 转换成 DataFrame、DataSet *********/
  15. // 读取list数据创建RDD
  16. val rdd:RDD[(Int,String,String,Int)]=spark.sparkContext.makeRDD(list)
  17. // 将RDD转换为DataFrame,指定列名为("id","name","sex","age"),并打印输出
  18. val df:DataFrame=rdd.toDF("id","name","sex","age")
  19. df.show()
  20. // 将RDD转换为DataSet,以样例类的方式转换,并打印输出
  21. val ds=rdd.map{line=>Staff(line._1,line._2,line._3,line._4)}.toDS()
  22. ds.show()
  23. /********* DataFrame 转换成 RDD、DataSet *********/
  24. // 读取staff.josn文件创建DataFrame
  25. val df1: DataFrame = spark.read.json(path1)
  26. // 将DataFrame转换为RDD,并打印输出
  27. val rdd1=df1.rdd
  28. rdd1.collect().foreach(println)
  29. // 将DataFrame转换为DataSet,并打印输出
  30. val ds1=df1.as[Staff]
  31. ds1.show()
  32. /********* DataSet 转换成 RDD、DataFrame *********/
  33. // 读取staff2.json文件创建DataSet,并以Staff样例类的方法创建
  34. val ds2: Dataset[Staff] = spark.read.json(path2).as[Staff]
  35. // 将DataSet转换为DataFrame,并打印输出
  36. val df2=ds2.toDF
  37. df2.show()
  38. // 将DataSet转换为RDD,并打印输出
  39. val rdd2=ds2.rdd
  40. rdd2.collect().foreach(println)
  41. /********* End *********/
  42. // TODO 关闭环境
  43. spark.close()
  44. }
  45. // Staff样例类
  46. case class Staff(id: BigInt,name: String,sex: String,age: BigInt)
  47. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/389338
推荐阅读
相关标签
  

闽ICP备14008679号