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

如何通过SQL或PySpark将多行数据转换为单行多列

解决同一ID下多行转单行多列的问题(基于field_name映射field_value)

SQL 实现

你之前用CASE WHEN没得到预期结果,核心原因是没加GROUP BY子句——必须按ID分组后聚合结果,才能把同一ID的多行合并成单行。假设你的表名为your_table,字段为id、field_name、field_value_name,代码示例如下:

SELECT
    id,
    MAX(CASE WHEN field_name = '姓名' THEN field_value_name END) AS 姓名,
    MAX(CASE WHEN field_name = '年龄' THEN field_value_name END) AS 年龄,
    MAX(CASE WHEN field_name = '性别' THEN field_value_name END) AS 性别,
    MAX(CASE WHEN field_name = '地址' THEN field_value_name END) AS 地址
    -- 可根据实际field_name值继续添加对应列
FROM your_table
GROUP BY id;

逻辑说明

  • CASE WHEN负责匹配每个field_name,提取对应的field_value_name
  • 用MAX()(或MIN(),因为同一ID+field_name只会有一个值)聚合函数,把多行结果合并成单行
  • GROUP BY id确保每个ID只返回一行整合后的记录

PySpark 实现

方法1:使用pivot(推荐,更简洁)

PySpark的pivot是专门处理行转列的API,能自动根据field_name的唯一值生成对应列:

from pyspark.sql import SparkSession
from pyspark.sql.functions import first

# 初始化SparkSession(已初始化可跳过)
spark = SparkSession.builder.appName("row_to_col").getOrCreate()

# 假设你的DataFrame名为df
pivoted_df = df.groupBy("id") \
               .pivot("field_name") \
               .agg(first("field_value_name"))

# 查看结果
pivoted_df.show()

如果field_name的取值过多,可指定需要保留的字段来减少生成的列数:

# 指定只生成姓名、年龄、性别列
pivoted_df = df.groupBy("id") \
               .pivot("field_name", ["姓名", "年龄", "性别"]) \
               .agg(first("field_value_name"))

方法2:CASE WHEN + GROUP BY

和SQL逻辑完全一致,用PySpark函数实现:

from pyspark.sql.functions import when, max

agg_df = df.groupBy("id") \
           .agg(
               max(when(df.field_name == "姓名", df.field_value_name)).alias("姓名"),
               max(when(df.field_name == "年龄", df.field_value_name)).alias("年龄"),
               max(when(df.field_name == "性别", df.field_value_name)).alias("性别"),
               max(when(df.field_name == "地址", df.field_value_name)).alias("地址")
               # 按需添加其他field_name对应的列
           )

agg_df.show()

逻辑说明

  • pivot自动枚举field_name的唯一值作为新列名,first()/max()用于聚合分组内的对应值
  • 两种方法都能保证同一ID只返回一行整合后的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:03