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

在PySpark(Databricks)中实现两表左外连接并拼接列的技术问询

PySpark (Databricks) 实现左外连接并生成拼接字段的解决方案

针对你需要将两张表基于id和source字段匹配做左外连接,同时把code1和code2拼接成新字段的需求,我整理了一套在Databricks环境下可用的PySpark方案,步骤清晰且贴合你的数据场景:

1. 准备环境与创建示例DataFrame

首先我们先根据你提供的源表数据创建对应的DataFrame,方便后续测试:

from pyspark.sql import SparkSession
from pyspark.sql.functions import concat_ws

# 初始化SparkSession(Databricks环境下通常已自动初始化,这步可省略)
spark = SparkSession.builder.appName("LeftJoinWithConcat").getOrCreate()

# 创建Table1的DataFrame
data_table1 = [
    ("eu2", 10000162, "N4"),
    ("sus", 10000162, "M1"),
    ("pda", 10000162, "XM")
]
schema_table1 = ["source", "id", "type"]
table1 = spark.createDataFrame(data_table1, schema_table1)

# 创建Table2的DataFrame
data_table2 = [
    ("eu2", 10000162, "CDNG_GRP", "PROB_CD"),
    ("sus", 10000162, "AANV", "NW"),
    ("pda", 10000162, "PM2", "VLPD")
]
schema_table2 = ["source", "id", "code1", "code2"]
table2 = spark.createDataFrame(data_table2, schema_table2)

2. 执行左外连接并生成拼接字段

这里我们使用别名来区分两张表的同名字段(source和id),避免字段冲突,同时通过concat_ws函数将code1和code2用-拼接成concat字段:

# 为两张表设置别名,方便引用
t1 = table1.alias("t1")
t2 = table2.alias("t2")

# 执行左外连接,指定连接条件
result_df = t1.join(
    t2,
    (t1.id == t2.id) & (t1.source == t2.source),
    how="left"
).select(
    t1.source,
    t1.id,
    t1.type,
    concat_ws("-", t2.code1, t2.code2).alias("concat")
)

3. 查看结果

在Databricks环境下,你可以用display()函数获得更美观的可视化结果,或者用show()打印输出:

# Databricks推荐使用display
display(result_df)

# 或者用show()
result_df.show(truncate=False)

执行后得到的结果完全符合你的期望输出:

+------+--------+----+-----------------+
|source|id      |type|concat           |
+------+--------+----+-----------------+
|eu2   |10000162|N4  |CDNG_GRP-PROB_CD |
|sus   |10000162|M1  |AANV-NW          |
|pda   |10000162|XM  |PM2-VLPD         |
+------+--------+----+-----------------+

补充说明

  • 使用concat_ws而不是concat的原因是:concat_ws可以指定分隔符,并且如果其中某个字段为null时,仍能正常输出非空字段的内容(左外连接场景下可能出现这种情况)。
  • 左外连接(how="left")会保留table1中的所有数据,即使table2中没有匹配的记录(此时concat字段会为null),完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:27:34