PySpark 各种姿势的join连接
参考:https://sparkbyexamples.com/pyspark/pyspark-join-explained-with-examples/
1. PySpark 连接语法
PySpark SQL 连接具有以下语法,可以直接从 DataFrame 访问。
join()
操作接受如下参数并返回DataFrame。
- 参数 other:连接的右侧
- 参数 on:连接列名称的字符串
- 参数如何:默认
inner
。必须是inner
,cross
,outer
,full
,full_outer
,left
,left_outer
,right
,right_outer
,left_semi
, 和之一left_anti
。
您还可以通过在 DataFrame 上添加where()和filter()方法来编写 Join 表达式,并且可以在多个列上进行 Join。
2. PySpark 连接类型
以下是 PySpark 支持的不同连接类型。
Join String | Equivalent SQL Join |
inner | INNER JOIN |
outer, full, fullouter, full_outer | FULL OUTER JOIN |
left, leftouter, left_outer | LEFT JOIN |
right, rightouter, right_outer | RIGHT JOIN |
cross | |
anti, leftanti, left_anti | |
semi, leftsemi, left_semi |
PySpark 连接类型
在我们进入 PySpark SQL Join 示例之前,首先,让我们创建一个"emp"
和"dept"
DataFrames。在这里,列"emp_id"
在 emp 上"dept_id"
是唯一的,并且在 dept 数据集上是唯一的,并且来自 emp 的 emp_dept_id 具有对 dept 数据集上的 dept_id 的引用。
这会将“emp”和“dept”DataFrame 打印到控制台。请参阅下面有关如何创建spark
对象的完整示例。
3. PySpark 内连接数据框
Inner
join 是 PySpark 中的默认连接,它最常被使用。emp
这会在键列上连接两个数据集,其中键与从两个数据集 ( & dept
) 中删除的行不匹配。
当我们对数据集应用内连接时,它会从“”数据集中删除“ emp_dept_id
”50,从“ emp
”数据集中删除“ dept_id
”30 dept(因为二者没有交集)
。下面是上述 Join 表达式的结果。
4. PySpark 全外连接
Outer
aka full
,fullouter
join 返回两个数据集中的所有行,其中 join 表达式不匹配它在相应的记录列上返回 null 。
从我们的“ emp
”数据集的“ emp_dept_id
”中,值为 50 的“ ”上没有记录,dept
因此 dept 列有 null ,“ dept_id
” 30 在“ ”中没有记录,emp
因此您在 emp 列上看到 null(直观理解,就是并集) 。下面是上述 Join 表达式的结果。
5. PySpark 左外连接
Left
aka Leftouter
join 返回左侧数据集中的所有行,无论在右侧数据集上找到匹配,当连接表达式不匹配时,它为该记录分配 null 并从右侧删除未找到匹配的记录。
从我们的数据集中,“ emp_dept_id
” 5o 在“ ”数据集上没有记录,因此,该记录在“ ”列(dept_name 和 dept_id)dept
上包含空值。dept
和“ ”数据集中的“ dept_id
” 30 从dept
结果中删除。下面是上述 Join 表达式的结果。
更多见原文
9. PySpark 自加入
没有自连接,连接是不完整的,虽然没有可用的自连接类型,但我们可以使用上述任何一种连接类型将 DataFrame 连接到自身。下面的示例使用inner
自联接。
在这里,我们将emp
数据集与自身结合起来,以找出优秀的emp_id
并name
为所有员工服务。
4. 使用 SQL 表达式
由于 PySpark SQL 支持原生 SQL 语法,我们还可以在 DataFrames 上创建临时表后编写连接操作,并在spark.sql()
.
5. PySpark SQL Join 多个 DataFrames
当您需要连接两个以上的表时,您可以在 DataFrame 上创建临时视图后使用 SQL 表达式,或者使用连接操作的结果与另一个 DataFrame 连接,例如链接它们。例如
示例可在GitHub项目中获得以供参考。
结论
在本 PySpark SQL 教程中,您学习了可以使用 DataFrame 的join()
功能连接两个或多个 DataFrame,Join 类型语法、用法和 PySpark 示例(Spark with Python),我还建议您阅读优化 SQL 连接以了解对连接的性能影响。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2017-08-12 Spark技术在京东智能供应链预测的应用——按照业务进行划分,然后利用scikit learn进行单机训练并预测
2017-08-12 SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流
2017-08-12 英特尔深度学习框架BigDL——a distributed deep learning library for Apache Spark