DataSet可以通过Scala的序列获取到DataSet,也可以通过RDD转换得到DataSet,也可以通过DataFrame转换得到DataSet.

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

代码

  1. import org.apache.spark.sql.{Dataset, SparkSession}
  2. /**
  3. * 定义user实体类
  4. *
  5. * @param name
  6. * @param age
  7. */
  8. case class User(name: String, age: Int)
  9. object CreateDataSet {
  10. def main(args: Array[String]): Unit = {
  11. //demo1() // 对象
  12. demo2() // 基本数据类型
  13. }
  14. /**
  15. * 对象
  16. */
  17. def demo1(): Unit = {
  18. val sparkSession = SparkSession
  19. .builder()
  20. .master("local[*]")
  21. .appName("CreateDataSet")
  22. .getOrCreate()
  23. import sparkSession.implicits._
  24. val list = List(User("张三", 15), User("李四", 20), User("王五", 25))
  25. val ds = list.toDS()
  26. // 在ds做sql查询
  27. // 定义临时视图
  28. ds.createOrReplaceTempView("user")
  29. //查询语句
  30. sparkSession.sql("select * from user where age > 15").show
  31. sparkSession.stop()
  32. sparkSession.close()
  33. }
  34. /**
  35. * 基本数据类型
  36. */
  37. def demo2(): Unit = {
  38. val sparkSession: SparkSession = SparkSession
  39. .builder()
  40. .master("local[*]")
  41. .appName("CreateDS")
  42. .getOrCreate()
  43. import sparkSession.implicits._
  44. val list1 = List(30, 50, 70, 60, 10, 20)
  45. // 把集合转成ds
  46. val ds: Dataset[Int] = list1.toDS()
  47. // df能用的ds一定可以用
  48. ds.show
  49. }
  50. }

运行结果

demo1的结果

  1. +----+---+
  2. |name|age|
  3. +----+---+
  4. | 李四| 20|
  5. | 王五| 25|
  6. +----+---+

demo2的结果

  1. +-----+
  2. |value|
  3. +-----+
  4. | 30|
  5. | 50|
  6. | 70|
  7. | 60|
  8. | 10|
  9. | 20|
  10. +-----+

码云地址

https://gitee.com/crow1/ZJJ_SparkSQL/blob/01343f4/demo01/src/main/java/com/CreateDataSet.scala