Dataset 介绍_Dataset 是什么 | 学习笔记

简介: 快速学习 Dataset 介绍_Dataset 是什么

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段 Dataset 介绍_Dataset 是什么】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12042


Dataset 介绍_Dataset 是什么

 

spark SQL 初体验说到了 spark 系统不仅支持两种 API 的方式,第一种 SQL 支持命令和 SQL,对于命令式和 SQL 的支持,都是由 sparkSQL 的两个 API 或者一个 API 来进行支持,用于支持这两种范式的 API 叫做 Dataset,和 DataFrame。

Dataset 和 DataFrame 是什么吗?

没有去严格的单独的去说这两个,它的意义,但是又很重要,无论命令式还是系统,都要使用到这两个东西。

通过 Dataset 特点这一大章节,希望大家了解什么是 Dataset,以及他该如何去使用,先去介绍一下 Dataset 是什么,怎么用好 Dataset。

希望大家能够理解 set 里面都可以执行什么样的操作,我们的步骤要先去写一段代码来证明有什么用,再回答大家问题。

先看第一步,把代码写出来,打开 IDEA,我们去创建一个新的测试方法,命名为 Dataset1,命名了以后,要有一些步骤,编写的 sight 的代码的步骤。

第一步就是创建 spark session,在前面创建context,因为这个新的 SQL 出现,老的 spark context 没有那么够用了,只能搞一个统一的全局的一个新款的入口 API。

第二步,我们导入这个隐式转换中有一个叫做 to df 的 API,要想把一个 IDEA 转成一个 DataFame,或者转成一个 Dataset,要先去导这个隐式转换,才能进行相应的转换。

第三步,演示一下 sight 里面有什么,如果是这样的话,我们就先来看第一步, spark new 出来,Spark session Mark 是 builder,创建出来这个 builder,可以往其中设置 master,就不用使用 sight,直接使用 master,然后,写上 logical。

接下来设置一下name,这个 API name,我们通过 get or create,为什么还要在 get or create?

一般情况下,在这个 RDD 程序当中,会把 spark context 命名为 SC,spark session 就命名为 spark,接下来导入 important,Spark implictis,这个 spark 是一个包,然后,有一个叫做 implictis,这个 spark 是一个对象,把一个对象当中的 implictis 一个 object 导入进来,把这些隐式转换导入进来以后,就可以去创建一个 RDD,这个 RDD 创建就不再自己手写,创建一个 RDD 以后要求得到一个 data,通过这个source RDD,To DS 这样的一个 API,将其转为 Dataset。

首先我有一个需求,想查出年龄超过十岁的用户,现在是有两个用户,一个十岁,一个15岁。

查出这个李四来,这个代码可以怎么写,可以直接通过 Dataset,Filter 也可以,where 也可以,where 其实是 Filter的一个变种,filter 所支持的功能,相对来说还会更多一些。

我们首先来看 Filter,用 filter过滤掉不大于十是不是就可以了?Filter 当中可以直接使用 API 来进行操作吗?

比如说 item age 大于十岁,可以的,show 一下,接下来,第一种方式就是说这个Dataset 支持,就是支持强类型的 API,把 RDD 改为强类型,拿到一个 item,是一个强类型的 item,一个 person,所以在使用强类型的 APP是可以的,我们可不可以直接使用弱类型,弱类型 API 是什么意思?

就是让你直接通过一个点,通过 age 大于十也可以,我们再去 show 一下,show 完了以后,弱类型的 API 就这一种吗?

不一定,还有什么 Dataset,filter,这个其实有一个变种,你可以写为$age 大于10,这也是可以,直接写上 Dollar 是不行的,要在这个 Dollar 后面追加上一个字符,一个标识号,就可以去选中这个 age,然后我们可以再去 show,这个是我们的第二种弱类型的写法,不但可以使用这个弱类型的 API Dataset 还有厉害的的功能,就是它可以直接通过 SQL 表达式来进行查询,可以直接编写 SQL 表达式,我们来写一写,Dataset.set.filter 然后其中,可以直接 age 大于十,然后.show。

这四种方式都是可以的,以这个 item 这样的一个函数为代表的,这个强类型的 API,它是支持的,可以写成这种弱类型的 API,就是直接取其中的某一列。

image.png

这是我们的四种编写方式,我们来简单的运行一下。

可以看到,这是第一个 show 的结果,第一个 show 在这。

image.png

没有问题,我们再往下走,又经历了一个 action,每一个 action 是不是都是一次 join 的执行,我们再继续向下看,第二个结果也拿到了。

image.png

然后,我们再接下来看第三个结果,我们也拿到了。

image.png

最后,第四个结果也拿到了。

说明我们的代码是没有任何问题的,也就是说这个Dataset确实支持这四种方式。

 image.png

接下来回答一些问题

问题: People 是什么?

People 是一个强类型的类

问题2:这个 Dataset 中是结构化的数据吗?

非常明显是的,因为 People 对象中有结构信息,例如字段名和字段类型

间题3:这个 Dataset 能够使用类似 SQL 这样声明式结构化查询语句的形式来查询吗?

当然可以,已经演示过了

问题4: Dataset 是什么?

Dataset 是一个强类型,并且类型安全的数据容器,并且提供了结构化查询 API 和类似 RDD 一样的命令式 API。

相关文章
|
开发者 iOS开发
如何使用 Instruments 工具来分析应用的性能?
如何使用 Instruments 工具来分析应用的性能?
578 2
|
关系型数据库 MySQL 数据库连接
使用Django框架完成用户的增删改查操作
使用Django框架完成用户的增删改查操作
284 1
|
缓存 小程序 JavaScript
4.1【微信小程序全栈开发课程】个人中心(一)--页面样式、用户信息展示
第四章,我们来完善个人中心,主要操作是src/pages/me文件夹中的me.vue文件,先看看个人中心页面的效果:
2014 0
4.1【微信小程序全栈开发课程】个人中心(一)--页面样式、用户信息展示
|
Rust API 开发者
【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
1634 0
|
敏捷开发 持续交付 项目管理
敏捷开发下如何选择高效的协同工具?提升研发团队项目管理与沟通效率的建议
本文介绍了6款适用于软件研发团队的协同工具,包括板栗看板、Jira、Trello、Slack、GitLab和Asana,涵盖了任务管理、版本控制、文档协作等方面。每款工具都有其独特的优势和适用场景,如板栗看板适合敏捷开发的小型团队,Jira适用于大型项目的复杂管理,Trello以简洁易用著称,Slack强化团队沟通,GitLab支持CI/CD流程,Asana则擅长跨团队协作。选择合适的工具能有效提升团队效率和项目管理能力。
敏捷开发下如何选择高效的协同工具?提升研发团队项目管理与沟通效率的建议
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试在软件开发生命周期中的关键作用
在当今快节奏的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市时间的重要工具。本文深入探讨了自动化测试在软件开发生命周期(SDLC)各个阶段的应用和效益,包括需求分析、设计、编码、测试和维护等环节。通过具体案例分析,展示了自动化测试如何帮助团队提高测试效率、减少人为错误并缩短产品迭代周期。文章还讨论了实施自动化测试时面临的挑战,如选择合适的工具、编写可维护的测试脚本和处理动态变化的需求,以及如何克服这些挑战的策略。最后,提出了自动化测试的未来趋势,强调了持续集成/持续部署(CI/CD)流程中自动化测试的重要性,以及人工智能和机器学习技术在自动化测试领域的潜力。
341 14
|
机器学习/深度学习 人工智能 测试技术
NeurIPS D&B 2024 突破短视频局限!MMBench-Video解读MLLM视频理解能力
GPT-4o 四月发布会掀起了视频理解的热潮,而开源领军者Qwen2也对视频毫不手软,在各个视频评测基准上狠狠秀了一把肌肉。
|
供应链 安全 网络安全
区块链技术与网络安全:机遇与挑战
区块链技术与网络安全:机遇与挑战
482 2
|
监控 Java Spring
Spring Boot中使用Actuator进行监控
Spring Boot中使用Actuator进行监控
|
存储 NoSQL 大数据
基于MongoDB的学生成绩数据操作
基于MongoDB的学生成绩数据操作
753 0
基于MongoDB的学生成绩数据操作