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

如何在PySpark中将多列转换为多行(列转行操作)

PySpark实现多列转多行(拆分为两组同结构行)

你可以用以下两种简单的方法实现需求:

方法1:直接拆分合并(Union方式)

这种方式直观易懂,适合固定分组的场景:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

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

# 读取你的CSV文件(示例用构造数据代替)
# df = spark.read.csv("your_file_path", sep="|", header=False, inferSchema=True)
data = [(1, "name1", "add1", "pr1", "type1", 2, "name2", "add2", "pr2", "type2")]
df = spark.createDataFrame(data, ["c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9"])

# 提取第一组列
df_group1 = df.select("c0", "c1", "c2", "c3", "c4")
# 提取第二组列并重命名为目标列名
df_group2 = df.select(
    col("c5").alias("c0"),
    col("c6").alias("c1"),
    col("c7").alias("c2"),
    col("c8").alias("c3"),
    col("c9").alias("c4")
)

# 合并两组数据
result_df = df_group1.union(df_group2)
result_df.show()

输出结果:

+---+-----+----+---+-----+
|c0 |c1   |c2  |c3 |c4   |
+---+-----+----+---+-----+
|1  |name1|add1|pr1|type1|
|2  |name2|add2|pr2|type2|
+---+-----+----+---+-----+

方法2:数组炸开(Array+Explode方式)

这种方式更灵活,适合需要拆分更多组的场景(比如20列拆成4行),不需要重复写多次select:

from pyspark.sql import SparkSession
from pyspark.sql.functions import array, explode, struct

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

data = [(1, "name1", "add1", "pr1", "type1", 2, "name2", "add2", "pr2", "type2")]
df = spark.createDataFrame(data, ["c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9"])

# 将两组列分别打包成结构体,放到数组中,再炸开数组得到多行
result_df = df.select(
    explode(
        array(
            struct("c0", "c1", "c2", "c3", "c4"),
            struct(col("c5").alias("c0"), col("c6").alias("c1"), col("c7").alias("c2"), col("c8").alias("c3"), col("c9").alias("c4"))
        )
    ).alias("row_data")
).select("row_data.*")

result_df.show()

核心逻辑是用struct把每组列打包成结构体,用array组合多个结构体,再通过explode将数组拆成多行,最后展开结构体字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:15:48