【Pyspark-驯化】一文搞懂Pyspark中表连接的使用技巧

【Pyspark-驯化】一文搞懂Pyspark中表连接的使用技巧

本次修炼方法请往下查看

🌈 欢迎莅临 我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!

🎇 相关内容文档 获取 微信公众号

🎇 相关内容视频 讲解 B站

🎓 博主简介 :AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长 : 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析 等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次 有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采 : 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

🌵文章目录🌵

    • [🎯 1.基本介绍](#🎯 1.基本介绍)
    • [💡 2. 代码用法](#💡 2. 代码用法)
      • [2.1 初始化spark环境](#2.1 初始化spark环境)
      • [2.2 创建临时表](#2.2 创建临时表)
      • [2.3 创建Hive表](#2.3 创建Hive表)
      • [2.3 内连接](#2.3 内连接)
      • [2.4 左连接](#2.4 左连接)
      • [2.5 全连接](#2.5 全连接)
    • [💡 3. 高级用法](#💡 3. 高级用法)
      • [3.1 使用多个连接条件](#3.1 使用多个连接条件)
      • [3.2 使用别名](#3.2 使用别名)
    • [💡 4. 注意事项](#💡 4. 注意事项)
    • [💡 5. 总结](#💡 5. 总结)

下滑查看解决方法

🎯 1.基本介绍

在数据处理和分析中,表连接(Join)是一种常用的操作,用于将两个或多个表中满足特定条件的数据行组合在一起。PySpark提供了多种连接函数,允许用户根据不同的键进行内连接、外连接、左连接和右连接。

💡 2. 代码用法

2.1 初始化spark环境

对于pyspark来讲,常用的就是sparkcontext类,一般都是先启动一个这样的程序才可以进行相应的操作,而SparkSession可以在不创建SparkConf,SparkContext或SQLContext的情况下创建SparkSession(它们封装在SparkSession中), 这个sparksession就是用来调取dataframe相关操作的类,具体的操作如下:

python 复制代码
    # 一般在进行spark-submit的.py文件在初始化的时候,需要创建spark对象,具体如下
    from pyspark import SparkConf
    from pyspark import SparkContext
    from pyspark.sql import SparkSession
    from pyspark.sql import SQLContext
    from pyspark.sql import Row
    from pyspark.sql.types import StructType
    from pyspark.sql.types import StructField
    from pyspark.sql.types import StringType
    from pyspark.sql import functions as fn
    from pyspark.sql import types as T
    sc_conf = SparkConf().setAppName('b2b_fraud_data')
    spark = SparkSession.builder.config(conf=sc_conf).enableHiveSupport().getOrCreate()
  • 而对于上述的两个class来说,经常对创建相关的临时表,createOrReplaceTempView:创建临时视图,此视图的生命周期与用于创建此数据集的[SparkSession]相关联。
    createGlobalTempView:创建全局临时视图,此时图的生命周期与Spark Application绑定。如果想要删除的话就得使用spark.catalog.dropGlobalTempView("tempViewName")

2.2 创建临时表

假设df_res是一个已经存在的DataFrame,我们将创建一个临时视图。,具体代码如下所示:

python 复制代码
# 创建临时表
df_res.createOrReplaceTempView("temp_table")

2.3 创建Hive表

定义Hive表结构,并使用CREATE TABLE语句创建表,具体的代码如下所示:

python 复制代码
tfrom pyspark.sql import Row

# 创建两个简单的数据集
data1 = [Row(id=1, name="Alice"), Row(id=2, name="Bob")]
data2 = [Row(id=1, age=25), Row(id=3, age=30)]

df1 = spark.createDataFrame(data1)
df2 = spark.createDataFrame(data2)

2.3 内连接

内连接的原理就是保留表中两个都存在的数据,具体的代码如下所示:

python 复制代码
# 内连接,只保留两个表中都有的行
join_condition = df1.id == df2.id
joined_df = df1.join(df2, join_condition)

# 显示连接结果
joined_df.show()

+---+-----+---+
| id| name|age|
+---+-----+---+
|  1|Alice| 25|

2.4 左连接

左连接,保留左侧表的所有行,右侧表中没有匹配的行将填充为null,具体的代码如下所示:

python 复制代码
left_joined_df = df1.join(df2, join_condition, "left_outer")

# 显示连接结果
left_joined_df.show()

+---+-----+---+
| id| name|age|
+---+-----+---+
|  1|Alice| 25|
|  2|  Bob|null|

2.5 全连接

全连接,保留两个表中的所有行,没有匹配的行将填充为null,具体的代码如下所示:

python 复制代码
# 全连接,保留两个表中的所有行,没有匹配的行将填充为null
full_joined_df = df1.join(df2, join_condition, "full_outer")

# 显示全连接结果
full_joined_df.show()

+---+-----+----+
| id| name|age|
+---+-----+----+
|  1|Alice| 25|
|  2|  Bob|null|
|  3|null| 30|

💡 3. 高级用法

3.1 使用多个连接条件

我们也可以通过对多个条件进行连接,具体的代码如下所示:

python 复制代码
# 多个条件的连接
join_condition_complex = (df1.id == df2.id) & (df1.name == df2.name)
joined_df_complex = df1.join(df2, join_condition_complex)

3.2 使用别名

也可以先对表进行名字的修改防止连接出现冲突问题,具体的代码如下所示:

python 复制代码
# 使用别名避免列名冲突
df1_with_alias = df1.alias("person")
df2_with_alias = df2.alias("age_info")

joined_df_with_alias = df1_with_alias.join(df2_with_alias, df1_with_alias.id == df2_with_alias.id)

💡 4. 注意事项

  • 选择合适的连接类型(内连接、左连接、右连接、全外连接)以满足分析需求。
  • 使用join_condition参数指定连接条件,确保连接逻辑正确。
  • 考虑连接操作的性能,尤其是在处理大规模数据集时。
  • 使用别名可以避免因表中有相同名称的列而产生的歧义。

💡 5. 总结

PySpark中的连接函数是处理和分析数据集的重要工具。通过本博客的代码示例,我们学习了如何使用不同的连接类型和条件来合并数据。希望这篇博客能够帮助你更好地理解PySpark中的连接操作,并将其应用于实际的数据处理任务中。

相关推荐
AI企微观察9 小时前
企业微信SCRM系统有什么作用,满足哪些功能?从获客到提效的功能适配逻辑
大数据·企业微信·scrm·企业微信scrm
Kay_Liang9 小时前
【Hive 踩坑实录】从元数据库初始化到 HiveServer2 启动的全流程问题解决
大数据·linux·hive·hadoop·笔记·mysql·ubuntu
IT学长编程10 小时前
计算机毕业设计 基于Python的电商用户行为分析系统 Django 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·django·毕业设计·课程设计·电商用户行为分析系统
StarRocks_labs10 小时前
告别 Hadoop,拥抱 StarRocks!政采云数据平台升级之路
大数据·数据库·starrocks·hadoop·存算分离
Hello.Reader11 小时前
Flink DataStream API 基础构件DataStream × Partitioning × ProcessFunction
java·大数据·flink
wudl556611 小时前
Flink Keyed State 详解之五
大数据·flink
Hello.Reader18 小时前
Flink ExecutionConfig 实战并行度、序列化、对象重用与全局参数
java·大数据·flink
金融Tech趋势派19 小时前
企业微信AI SCRM推荐:从技术适配与场景功能实践进行评估
大数据·人工智能
JZC_xiaozhong20 小时前
异构系统集成提速:重构企业数据流转架构
大数据·重构·架构·数据分析·etl工程师·数据集成与应用集成·异构数据整合
阿里云大数据AI技术20 小时前
PAI-DLC 支持一键提交 DataJuicer 任务,高效进行大规模多模态数据处理
大数据·人工智能