0%

DataSet编程

DataSet编程

DataSet是分布式数据集合,是DataFrame的一个扩展,是强类型的,可以使用如DataSet[User],而DataFrame其实是DataSet的一个特例,DataFrame=DataSet[Row],DataFrame每一行的类型都是Row,每一列的值无法直接访问,需要进行解析,比较麻烦,所以出现了DataSet,可以自己定义数据每行的类型

DataSet是强类型的数据集合,类型一般使用的是样例类

创建DataSet

首先定义一个样例类

1
case class User(name:String,age:Long)

可以使用样例类的序列来创建DataSet

1
2
3
// caseDS: org.apache.spark.sql.Dataset[User] = [name: string, age: bigint]
val caseDS = Seq(User("zhangsan",18)).toDS

也可以使用RDD来转换为DataSet

1
2
3
4
5
6
7
// rdd: org.apache.spark.rdd.RDD[User]
val rdd = sc.makeRDD(List(User("zhangsan",18),User("lisi",20)))
// org.apache.spark.sql.Dataset[User] = [name: string, age: bigint]
val rddDs = rdd.toDS

// DataSet转回rdd
rddDs.rdd

也可以使用DataFrame来转换为DataSet

1
2
3
4
5
6
7
8
9
// 首先使用上述的rdd来映射为dataFrame
// org.apache.spark.sql.DataFrame = [name: string, age: bigint]
val rddDF = rdd.toDF("name","age")

// org.apache.spark.sql.Dataset[User] = [name: string, age: bigint]
val dfToDs = rddDF.as[User]

// DataSet转回DataFrame
dfToDs.toDF