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

如何在PySpark中合并两个列名一致的DataFrame并保留所有数据行

PySpark 同列名DataFrame合并方案

你需要合并两个列结构完全一致的DataFrame并保留所有行,直接使用PySpark内置算子即可实现,具体方案如下:

核心实现代码

因为两个DataFrame列名完全相同,优先使用unionByName算子,它会按照列名对齐合并,避免列顺序不一致导致的数据错位问题:

# 合并两个DataFrame全量数据
merged_df = df1.unionByName(df2)

如果确认两个DataFrame的列顺序完全一致,也可以直接使用union(Spark 2.0+版本中unionAll已成为union的别名,二者功能完全相同):

merged_df = df1.union(df2)

如果需要匹配你给出的预期输出排序效果,加上按Item Id和model排序的逻辑即可:

result_df = merged_df.orderBy("Item Id", "model")

完整可测试示例

以下是包含模拟数据构造的完整可运行代码:

from pyspark.sql import SparkSession

# 初始化SparkSession
spark = SparkSession.builder.appName("merge_df_demo").getOrCreate()

# 构造DF1数据
df1_data = [
    (1, "item 1", 22, 100),
    (2, "item 2", 33, 300),
    (3, "item 3", 44, 400),
    (4, "item 4", 55, 500)
]
df1 = spark.createDataFrame(df1_data, schema=["Item Id", "item", "model", "price"])

# 构造DF2数据
df2_data = [
    (1, "item 1", 222, 1000),
    (1, "item 1", 2222, 10000),
    (2, "item 2", 333, 3000),
    (3, "item 3", 444, 4000),
    (4, "item 4", 555, 5000)
]
df2 = spark.createDataFrame(df2_data, schema=["Item Id", "item", "model", "price"])

# 合并并排序
result_df = df1.unionByName(df2).orderBy("Item Id", "model")

# 打印结果
result_df.show(truncate=False)

运行后输出结果和你提供的预期结果完全一致。

内容的提问来源于stack exchange,提问作者Santosh Reddy Kommidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:45:01