Spark大数据分与实践笔记(第四章 Spark SQL结构化数据文件处理-02)

第4章 Spark SQL结构化数据文件处理

4.3 Dataset概述

4.3.1 Dataset简介

Dataset是从Spark1.6 Alpha版本中引入的一个新的数据抽象结构,最终在Spark2.0版本被定义成Spark新特性。Dataset提供了特定域对象中的强顶型集合,也就是在RDD的每行数据中添加了类型约束条件,只有约束条件的数据类型才能正常运行。Dataset结合了RDD和DataFrame的优点,并且可以调用封装的方法以并行方式进行转换等操作。下面通过图4-5来理解RDD、DataFrame与Dataset三者的区别。
在这里插入图片描述
1RDD、DataFrame、Dataset数据示例

图4-1RDD、DataFrame、Dataset数据示例
在图4-5中,序号(1)–(4)分别展示了不同数据类型的抽象结构,其中:
(1)它是基本的RDD数据的表现形式,此时RDD数据没有数据类型和元数据信息。
(2)它是DataFrame数据的表现形式,此时DataFrame数据中添加了Schema元数据信息(列名和数据类型,例如ID: String),DataFrame每一行的类型固定为Row类型,每一列的值无法直接访问,只有通过解析才能获取各个字段的值。
(3)-(4)它们都是Dataset数据的表现形式,具中序亏(3)足任RDBt记1女PQoonlo将数掘米型,在型(value: String)作为Schema元数据信息。而序号(4)则针对每行数据添加了People强数据类型,在Dataset[Person]中里存放的是3个字段和属性,Dataset每一行数据类型都可以自己定义,一旦定义后,就具有严格的错误检查机制。

4.3.2 Dataset对象的创建

创建Dataset可以通过SparkSession中的createDataset来创建,具体代码如下所示。
在这里插入图片描述
在这里插入图片描述

从上述返回结果personDs的属性可以看出,Dataset从已存在的RDD中构建成功,并且赋予value为String类型。Dataset和DataFrame拥有完全相同的成员函数,通过show()方法可以展示personDs中数据的具体内容。
Dataset不仅能从RDD中构建,它与DataFrame可以互相转换,DataFrame可以通过“as[ElementType]”方法转换为Dataset,同样Dataset也可以使用toDF()方法转换为DataFrame,具体代码如下所示。

scala> spark.read.text( " /spark/person.txt" ).as[String]
res14: org.apache.spark.sql. Dataset[String] =[value: string]
scala>spark.read.text("/spark/person.txt").as[String].toDF()
res15: org.apache.spark.sql. DataFrame = [value: string]

Dataset操作与DataFrame大致相同,读者可查看官方APl http:/spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset 详细学习更多的Dataset操作。

4.4 RDD转换DataFrame

Spark官方提供了两种方法实现从RDD转换得到DataFrame,第一种方法是利用反射机制来推断Schema,这种方式适用于对已知数据结构的RDD转换;第二种方法通过编程接口构造一个Schema,并将其应用在已知的RDD数据中。

4.4.1 反射机制推断Schema

在Windows系统下开发Scala代码,可以使用本地环境测试,因此我们首先需要在本地磁盘准备文本数据文件,这里将HDFS中的/spark/person.txt文件下载到本地D:/spark/person.txt路径下。我们需要通过反射机制来推断包含特定类型对象的Schema信息。
接下来我们打开IDEA开发工具,创建名为"“spark_chapter04""的Maven工程,讲解实现反射机制推断Schema的开发流程。

4.4.1.1 添加Spark SQL依赖

在pom.xml文件中添加Spark SQL依赖,代码片段如下所示。

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifa
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妉妉师姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值