Dataset简介
Dataset是从Spark1.6 Alpha版本中引入的一个新的数据抽象结构,最终在Spark2.0版本被定义成Spark新特性。Dataset提供了特定域对象中的强类型集合,也就是在RDD的每行数据中添加了类型约束条件,只有约束条件的数据类型才能正常运行。Dataset结合了RDD和DataFrame的优点,并且可以调用封装的方法以并行方式进行转换等操作。下面通过图1来理解RDD、DataFrame与Dataset三者的区别。
图1 RDD、DataFrame、Dataset数据示例
在图1中,序号(1)-(4)分别展示了不同数据类型的抽象结构,其中:
(1)它是基本的RDD数据的表现形式,此时RDD数据没有数据类型和元数据信息。
(2)它是DataFrame数据的表现形式,此时DataFrame数据中添加了Schema元数据信息(列名和数据类型,例如ID:String),DataFrame每一行的类型固定为Row类型,每一列的值无法直接访问,只有通过解析才能获取各个字段的值。
(3)-(4)它们都是Dataset数据的表现形式,其中序号(3)是在RDD每一行数据的基础之上,添加了一个数据类型(value:String)作为Schema元数据信息。而序号(4)则针对每行数据添加了People强数据类型,在Dataset[Person]中里存放的是3个字段和属性,Dataset每一行数据类型都可以自己定义,一旦定义后,就具有严格的错误检查机制。