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

PySpark中如何将多个同名列的取值合并为单个列?

重复列合并实现方案

核心能力为自动识别表内同名字段,将同名列每行取值合并为列表存入单列,以下是两种通用实现方式:

Python Pandas 实现(数据拉取后处理,适配所有数据库场景)

该方案不需要提前知道重名列的名称和数量,逻辑完全自动化:

  • 先统计所有列名的出现频次,分离唯一列和重复列
  • 对每个重复列名,按行聚合所有同名对应列的取值为列表
  • 最终合并唯一列和聚合后的重名列得到结果

代码示例:

import pandas as pd

def merge_dup_cols(df):
    col_freq = df.columns.value_counts()
    unique_cols = col_freq[col_freq == 1].index.tolist()
    dup_cols = col_freq[col_freq > 1].index.tolist()

    res = df[unique_cols].copy()
    for col in dup_cols:
        # 如需输出带括号的字符串格式,替换为下方注释代码
        # res[col] = df[col].apply(lambda x: f"[{','.join(map(str, x))}]", axis=1)
        res[col] = df[col].apply(list, axis=1)
    return res

# 测试示例
if __name__ == "__main__":
    # ages表测试
    ages = pd.DataFrame([[25,1,2,3],[26,4,5,6]], columns=["age","ids","ids","ids"])
    print(merge_dup_cols(ages))
    # names表测试
    names = pd.DataFrame([["abc","a","b"],["xyc","c","d"]], columns=["name","company","company"])
    print(merge_dup_cols(names))

SQL 层面实现(拉取数据时直接处理)

如果是多表关联查询导致的列重名,可在查询时直接处理,注意SQL不支持返回同名字段,需要先给重名列加唯一别名再合并,MySQL示例如下:

SELECT 
  age,
  CONCAT('[', ids_1, ',', ids_2, ',', ids_3, ']') AS ids 
FROM (
  -- 关联查询时给同名列加别名区分
  SELECT 
    t1.age,
    t1.ids AS ids_1,
    t2.ids AS ids_2,
    t3.ids AS ids_3 
  FROM ages_t1 t1 
  LEFT JOIN ages_t2 t2 ON t1.age = t2.age
  LEFT JOIN ages_t3 t3 ON t1.age = t3.age
) tmp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:36:03