You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySpark中对两个含id列的DataFrame执行全外连接

没问题,这就帮你实现两个PySpark DataFrame的全外连接操作!

第一步:确认已创建的DataFrame

先回顾你给出的两个DataFrame创建代码,确保数据准备正确:

# 创建DataFrame a
valuesA = [('Pirate',1),('Monkey',2),('Ninja',3),('Spaghetti',4)]
a = sqlContext.createDataFrame(valuesA,['name','id'])
a.show()

# 创建DataFrame b
valuesB = [('dave',1),('Thor',2),('face',3), ('test',5)]
b = sqlContext.createDataFrame(valuesB,['Movie','id'])
b.show()

第二步:执行全外连接

PySpark提供了两种常用方式来实现全外连接,选你习惯的就行:

方式一:使用DataFrame API(推荐)

直接调用fullOuterJoin方法,指定连接键为共有的id列:

# 执行全外连接
full_join_result = a.join(b, on='id', how='full_outer')
full_join_result.show()

执行后会得到如下结果:

+---+---------+-----+
| id|     name|Movie|
+---+---------+-----+
|  1|   Pirate| dave|
|  2|   Monkey| Thor|
|  3|    Ninja| face|
|  4|Spaghetti| null|
|  5|     null| test|
+---+---------+-----+

方式二:使用SQL语法

如果你更熟悉SQL,可以先把DataFrame注册成临时视图,再用SQL语句实现:

# 注册临时视图
a.createOrReplaceTempView("table_a")
b.createOrReplaceTempView("table_b")

# 执行SQL全外连接
full_join_sql_result = sqlContext.sql("SELECT * FROM table_a FULL OUTER JOIN table_b ON table_a.id = table_b.id")
full_join_sql_result.show()

结果说明

  • id为1、2、3的行在两个DataFrame中都存在,所以name和Movie列均有对应值
  • id为4的行仅存在于DataFrame a中,因此Movie列显示null
  • id为5的行仅存在于DataFrame b中,因此name列显示null

内容的提问来源于stack exchange,提问作者User12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:19:42