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

PySpark如何合并DataFrame中的重复同名数据列?

PySpark DataFrame同名列合并实现方案

核心逻辑为按列名分组后对同组列做聚合处理,以下为可直接运行的完整实现:

前置依赖导入

from pyspark.sql import SparkSession
from pyspark.sql.functions import coalesce, col
from collections import defaultdict

步骤1:初始化Spark并构造测试样例(可跳过该步骤直接使用你自己的DataFrame)

spark = SparkSession.builder.appName("merge_duplicate_columns").getOrCreate()

# 测试数据和示例输入结构一致,包含两个重名的age列
data = [("Alice", 25, None), ("Bob", None, 30), ("Charlie", 35, None)]
df = spark.createDataFrame(data, schema=["name", "age", "age"])

步骤2:对同名列进行分组

col_groups = defaultdict(list)
for idx, col_name in enumerate(df.columns):
    col_groups[col_name].append(idx)

步骤3:生成合并后的列表达式

默认采用取第一个非空值的规则合并,你可以根据需求替换为其他聚合函数:

merged_cols = []
for col_name, idxs in col_groups.items():
    if len(idxs) == 1:
        # 无重复的列直接保留
        merged_cols.append(col(col_name))
    else:
        # 重复列合并,此处用coalesce取第一个非空值
        merged_cols.append(coalesce(*[df[idx] for idx in idxs]).alias(col_name))

步骤4:执行合并得到结果

result_df = df.select(*merged_cols)
result_df.show()

输出结果

+-------+---+
|   name|age|
+-------+---+
|  Alice| 25|
|    Bob| 30|
|Charlie| 35|
+-------+---+

自定义合并规则说明

如果需要其他合并逻辑,只需要修改步骤3中的聚合函数即可:

  • 数值型同名列求和:把coalesce(*[df[idx] for idx in idxs])替换为sum(*[df[idx] for idx in idxs])
  • 字符串同名列拼接:替换为concat_ws(",", *[df[idx] for idx in idxs])即可用逗号拼接所有同名列的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:27:03