【Spark开发必备技能】6-4-RDD/Dataset/DataFrame-Dataset常用方法
目录
1、Dataset方法综述
Dataset是从Spark 1.6开始引入的一个新的数据类型,当时还是处于alpha版本;然而在Spark 2.0,它已经变成稳定版了。
Dataset存储的是强类型的数据(如Dataset<String>),所以,使用DataSet方法,需要Encoder类来指定数据的具体类型。
另外,由于DataSet存储的是强类型的数据,在编译时,会做类型正确性校验。 注: DataFrame作为Dataset的一个特例,存储的是无类型的数据(格式是:Dataset<Row>),编译时不做类型校验
Dataset可以使用 DataFrame的方法(如select、group、sql语言查询等)和RDD的方法(如map、filter、reduce等),能较方便的进行数据操作。
2、Dataset创建
通常情况下,Dataset是通过DataFrame转换而来的。DataFrame的创建,以及DataFrame转Dataset的方法 详细参考 《DataFrame常见方法》
3、Encoder类创建
Dataset通过Encoder类序列化处理对象并在网络上传输而不是使用Java serialization或者Kryo方式。
尽管Encoder和标准序列化方式都是将对象转换为字节,但是Encoder是动态生成代码的,并且允许Spark在不需要反序列化的情况下执行许多操作,比如:过滤,排序,哈希等。
#1) 基本类型的 Encoder类创建
#2) 自定义类的 Encoder类创建
4、Dataset方法
Dataset可以使用 DataFrame的方法(如select、group、sql语言查询等)和RDD的方法(如map、filter、reduce等),能较方便的进行数据操作。
注:使用RDD的方法时,不能用lambda表达式,需要用匿名内部类的方法写。
#1)使用group方法举例
#2)使用map方法举例
5、Dataset转RDD
调用.toJavaRDD()方法