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

如何将DataFrame列元素合并为数组并转换格式?Delta Lake支持数组吗?

DataFrame格式转换与Delta Lake数组类型支持问题

一、DataFrame格式转换方法

Pandas 实现

直接遍历原始DataFrame的列,将每列元素转为列表后构造目标格式,无需先转置再处理,更高效:

import pandas as pd

# 原始数据
df = pd.DataFrame({'A': [1, 3, 5], 'B': [2, 4, 6]})

# 生成目标DataFrame
result_df = pd.DataFrame({
    'Key': df.columns,
    'Value': [df[col].tolist() for col in df.columns]
})

# 输出结果
print(result_df)

输出结果即为目标格式,Value列存储Python列表(对应需求中的数组形式)。

PySpark 实现(适配大数据场景)

基于Spark的大数据场景,使用原生collect_list聚合函数生成数组列,避免拉取数据到Driver端:

from pyspark.sql import SparkSession
from pyspark.sql.functions import collect_list, lit

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

# 原始DataFrame
df = spark.createDataFrame([(1, 2), (3, 4), (5, 6)], schema=['A', 'B'])

# 遍历每个列生成对应行,合并结果
result_dfs = []
for col_name in df.columns:
    # 聚合该列所有元素为数组,添加Key列
    single_col_df = df.agg(collect_list(col_name).alias('Value')) \
                      .withColumn('Key', lit(col_name)) \
                      .select('Key', 'Value')
    result_dfs.append(single_col_df)

# 合并所有列的结果
result_df = result_dfs[0].unionAll(*result_dfs[1:])

# 展示结果
result_df.show(truncate=False)

输出的Value列是Spark的ArrayType类型,符合数组存储需求。

二、Delta Lake对数组类型的支持

Delta Lake完全支持存储数组类型,不管是Spark的ArrayType还是Pandas的列表类型,都可以直接写入Delta表,无需额外配置。

写入示例(PySpark)

# 将带数组列的DataFrame写入Delta表
result_df.write.format("delta").mode("overwrite").save("/your/delta/path")

读取示例(PySpark)

# 读取Delta表,数组列会被正常解析
delta_df = spark.read.format("delta").load("/your/delta/path")
delta_df.printSchema()  # 可查看列类型,Value列会显示为array<int>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:55:33