目录

0. 相关文章链接

1. DataSet的定义

2. 创建DataSet

2.1. 使用样例类序列创建 DataSet

2.2. 使用基本类型的序列创建 DataSet

2.3. 注意

3. RDD 转换为 DataSet

4. DataSet 转换为 RDD


0. 相关文章链接

 Spark文章汇总 

1. DataSet的定义

DataSet 是具有强类型的数据集合,需要提供对应的类型信息。

2. 创建DataSet

2.1. 使用样例类序列创建 DataSet

scala> case class Person(name: String, age: Long)
defined class Person

scala> val caseClassDS = Seq(Person("zhangsan",2)).toDS()
caseClassDS: org.apache.spark.sql.Dataset[Person] = [name: string, age: Long]

scala> caseClassDS.show
+---------+---+
| name    |age|
+---------+---+
| zhangsan| 2 |
+---------+---+

2.2. 使用基本类型的序列创建 DataSet

scala> val ds = Seq(1,2,3,4,5).toDS
ds: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> ds.show
+-----+
|value|
+-----+
| 1   |
| 2   |
| 3   |
| 4   |
| 5   |
+-----+

2.3. 注意

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

3. RDD 转换为 DataSet

        SparkSQL 能够自动将包含有 case 类的 RDD 转换成 DataSet, case 类定义了 table 的结构, case 类属性通过反射变成了表的列名。 Case 类可以包含诸如 Seq 或者 Array 等复杂的结构。

scala> case class User(name:String, age:Int)
defined class User

scala> sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1,t._2)).toDS
res11: org.apache.spark.sql.Dataset[User] = [name: string, age: int]

4. DataSet 转换为 RDD

DataSet 其实也是对 RDD 的封装,所以可以直接获取内部的 RDD

scala> case class User(name:String, age:Int)
defined class User

scala> sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1,t._2)).toDS
res11: org.apache.spark.sql.Dataset[User] = [name: string, age: int]

scala> val rdd = res11.rdd
rdd: org.apache.spark.rdd.RDD[User] = MapPartitionsRDD[51] at rdd at <console>:25

scala> rdd.collect
res12: Array[User] = Array(User(zhangsan,30), User(lisi,49))

注:其他Spark相关系列文章链接由此进 ->  Spark文章汇总 


07-07 14:30