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

如何将Spark DataFrame所有行数据合并为单行单列并保持顺序?

实现方法

可以分两步严格按照要求完成数据合并,保证顺序完全符合预期:

步骤1:拼接每行的列值

先把每行的所有列按原始定义顺序拼接成单个字符串,用concat_ws函数指定空格作为分隔符:

from pyspark.sql import functions as F

# 按列顺序拼接每行的所有值
row_concat_df = df.select(F.concat_ws(" ", *df.columns).alias("row_str"))
row_concat_df.show()

这一步会得到每行的拼接结果:

+-------+
|row_str|
+-------+
|  1 foo|
|  2 bar|
+-------+

步骤2:合并所有行的字符串为整体

用collect_list收集所有行的拼接字符串(会严格保留原始行顺序),再用concat_ws把列表元素用空格连接,最终生成目标DataFrame:

# 收集所有行字符串并合并成单个结果
new_df = row_concat_df.agg(F.concat_ws(" ", F.collect_list("row_str")).alias("new_column"))
new_df.show()

执行后得到的结果完全符合需求:

+-------------+
|   new_column|
+-------------+
|1 foo 2 bar|
+-------------+

完整整合代码

把两步逻辑整合后的完整代码:

from pyspark.sql import SparkSession
from pyspark.sql import functions as F

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

# 原始DataFrame
df = spark.createDataFrame(
    [
        (1, "foo"),  
        (2, "bar"),
    ],
    ["id", "label"]  
)

# 合并逻辑实现
new_df = df.select(F.concat_ws(" ", *df.columns).alias("row_str")) \
           .agg(F.concat_ws(" ", F.collect_list("row_str")).alias("new_column"))

new_df.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:39:55