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

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

开发者学堂课程【大数据 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

相关文章
|
存储 关系型数据库 MySQL
终端连接MySQL进行操作(全网超详细的教程,手把手教你)
终端连接MySQL进行操作(全网超详细的教程,手把手教你)
706 0
|
5月前
|
前端开发 安全 编译器
C++进阶操作
C++进阶操作
|
7月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第二篇(函数)
MySQL数据库基础第二篇(函数)
|
存储 安全 编译器
C++:入门学习C++,它在C的基础上做了哪些修改?
C++:入门学习C++,它在C的基础上做了哪些修改?
|
NoSQL Java Redis
【项目实战典型案例】15.登录之后我加入的课程调用接口报错
【项目实战典型案例】15.登录之后我加入的课程调用接口报错
【项目实战典型案例】15.登录之后我加入的课程调用接口报错
|
BI 定位技术 Python
SWMM从入门到实践教程 04 快速入门案例的模拟执行
在左侧双击Options中的Dates,即可弹出时间的设置。此处为了教学,建议仅模拟6个小时,加快结果的生成。实际项目中,可以根据需求对指定场次的降雨时常进行模拟,并注意这个时常一定不低于降雨时常(我们的雨量计设置了2小时降雨,所有66个小时的模拟也是合理的)。
|
SQL 关系型数据库 MySQL
MySQL实战基础知识入门(10):今天、昨天、近7天、近30天在一个筛选语句内实现的解决方案
MySQL实战基础知识入门(10):今天、昨天、近7天、近30天在一个筛选语句内实现的解决方案
123 0
|
监控 Dubbo Java
使用场景演示 | 学习笔记
快速学习使用场景演示,介绍了使用场景演示系统机制, 以及在实际应用过程中如何使用。
使用场景演示 | 学习笔记
|
机器学习/深度学习 SQL 数据采集
阿里云相关产品基本操作演示|学习笔记
快速学习阿里云相关产品基本操作演示
195 0
阿里云相关产品基本操作演示|学习笔记
|
SQL 运维 分布式计算
阿里云相关产品操作演示 | 学习笔记
快速学习阿里云相关产品操作演示。
阿里云相关产品操作演示  |  学习笔记

相关实验场景

更多