连接操作_入门_案例 | 学习笔记

简介: 快速学习连接操作_入门_案例

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:连接操作_入门_案例】学习笔记,与课程紧密联系,让用户快速学习知识。

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


连接操作_入门_案例

 

连接案例

上节介绍了什么是连接,以及什么是 join,本节课主要介绍怎样使用连接,这需要做一个案例。

在做案例的过程中,第一步是编写案例,编写案例之前要先查看数据集如何连接、编写代码、多表联查。

1.简单连接案例

表结构如下:

Id

Name

Cityid

0

Lucy

0

1

Lily

0

2

Tim

2

3

Danial

0

 

Id

Name

0

Beijing

1

Shanghai

2

Guangzhou

以上是两个表,任务是将两个表进行连接,然后在这两个表连接过的中间表中进行查询。

问题:如何连接?分析步骤如下:

①观察数据集

②找到连接点

第一个表中的 cityid 可以看做是第二个表中的 id,根据任务要求,两个表连接得到的新表应该显示人名对应的城市,所以连接点应该分为两个:第一个连接点是 cityid,第二个连接点是第二个表的 id。在进行连接时要判断第一个表 cityid 和第二个表 id 是否相等,如果相同将 id 拿进新表中。

拷贝数据集,

val person = Seq((o, "Lucy", 0),(1, "Lily", 0),(2, "Tim", 2),(3, "Danial", 0))

.toDF( colNames = "id", "name", "cityId")

val cities = Seq((0, "Beijing"), (1, "Shanghai"), (2, "Guangzhou"))

. toDF( colNames = "id", "name")

进入.idea 创建新的类,类的名称为 JoinProcessor

代码:

package cn.itcast. spark.sql

import org . apache . spark . sql . SparkSession

import org. junit.Test

class JoinProcessor {

val spark = SparkSession. builder()

. master( master = "local[6]")

. appName( name = "join")

. getorcreate()

/将隐式转换导入

import spark. implicits._

@Test

def introJoin(): Unit = {

val person = Seq((0, "Lucy", 0),(1, "Lily", 0),(2, "Tim", 2),(3, "Danial", 0))

.toDF( colNames = "id", "name", "cityId")

注:

如果要使用 toDF,要先创建一个 sparksession,创建之后将隐式转换导入。

val cities = Seq((0, "Beijing"), (1, "Shanghai"), (2, "Guangzhou"))

. toDF( colNames = "id", "name")

第一个数据集中第一列数据是 id,第二列是姓名,第三列是 cityid;第二个数据集第一列数据是 id,这个 id 就是城市 id,第二列是城市名。

/根据 cityid 和 id 两个连接点进行连接

person.join(cities, person.col( colName = "cityId") === cities.col( colName = "id"))

注:cityId 是第一个表的,必须要标注 person,要标明是哪个数据中的哪个列。

/进行 select,选择如下三列数据

.select (person.col( colName = "id"),

person.col( colName = "name"),

cities.col( colName ="name"))

.show()

}

}

运行代码之后得到结果集,如下图:

image.png

在上图结果集中不仅显示用户的主键,还显示了用户的名字以及用户的城市。

前面课程说到连接是在一个查询语句中,同时查询多条数据。

将.show()注释到,生成一个数据集为 dataframe,通过 dataframe 进行 createorPeplaceTempView,并将它命名为 user_city。

Val df = person. join(cities, person.col( colName = "cityId") === cities.col( colName = "id"))

.select (person.col( colName = "id"),

person.col( colName = "name"),

cities.col( colName = "name") as "city")

.show()

df . createorReplaceTempView( viewName = "user_ city")

进行 sql 语句查询

spark.sql( sqlText= "select id, name, city from user_ city where city = ‘Beijing’" )

注:

select 后的 city 是 cities name,只是通过 as 将名称改为 city,也就是说在 select 时可以为某一个列取一个别名。

id 和 name 来源于第一个表,city 来源于第二个表,所以这个 spark.sql 语句是作用于两个表的,所以是同时访问了多条数据。

.show()

}

再次运行:

发现 city 为 beijing 的数据显现,并且将两个表的数据都查询出了。

image.png

发现 city 为 beijing 的数据显现,并且将两个表的数据都查询出了。

以上就是多表连接。

根据下图,sql 语句是作用于连接表,而连接表又是由用户表和城市表连接而成的,所以下图的 sql 语句是作用于用户表和城市表中的。

image.png

相关文章
|
弹性计算 网络安全
通过云企业网实现不同账号、相同地域下的ECS实例内网互通
阿里云的专有网络类型实例,如果在同一VPC下,不同安全组互相授权即可内网互通,不同VPC默认是互相隔离的,还需要通过云企业网打通VPC才能实现内网互通本例为不同账号,不同VPC下的实例内网互通(图为实验开始前测试内网不通)第一步:安全组授权安全组互相授权操作方法:注意1:需要两台服务器的安全组都添加.
6013 0
通过云企业网实现不同账号、相同地域下的ECS实例内网互通
|
Oracle JavaScript 关系型数据库
MySQL8 OCP可以个人报名了,内卷时代考个证提升自己
MySQL8 OCP可以个人报名了,内卷时代考个证提升自己
2875 0
MySQL8 OCP可以个人报名了,内卷时代考个证提升自己
|
9月前
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
79949 65
|
11月前
|
自然语言处理 前端开发 开发者
使用 modelscope-studio 构建你的 Gradio 应用
modelscope-studio是一个基于 Gradio 的三方组件库,它可以为开发者提供更定制化的界面搭建能力和更丰富的组件使用形式。
754 26
|
IDE Java 应用服务中间件
Java“NoSuchMethodFoundError”解决
“NoSuchMethodError”是Java运行时错误,表示调用了不存在的方法。通常由方法签名变更或不同版本的类文件不兼容引起。解决方法包括检查依赖版本、清理编译缓存和确保所有类文件一致。
1036 4
|
存储 Java 关系型数据库
Seata 2.x 首个版本正式发布,支持 Raft 集群模式
Seata 2.x 首个版本正式发布,支持 Raft 集群模式
731 95
|
前端开发 NoSQL Redis
如何实现大文件上传:秒传、断点续传、分片上传
如何实现大文件上传:秒传、断点续传、分片上传
1318 0
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
287 2
|
SQL 安全 关系型数据库
SQL自动化注茹-SQLmap入门操作(二)
SQL自动化注茹-SQLmap入门操作(二)
|
机器学习/深度学习 并行计算 算法
粒子群优化算法详细讲解(附完整代码实现一元二次方程求解)
粒子群优化算法详细讲解(附完整代码实现一元二次方程求解)