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

SparkSQL中如何将集合数组拆分为多列?

PySpark数组列拆分为多列的解决方案

你的targeting_values是数组类型,split()函数仅适用于字符串拆分,所以用它肯定行不通。直接通过数组索引提取元素就能实现需求,以下是两种可行方法:

方法一:使用withColumn+数组索引

先创建示例DataFrame(方便你测试验证):

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

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

# 模拟你的数据结构
data = [([('123', '123', '123'), ('abc', 'def', 'ghi'), ('jkl', 'mno', 'pqr'), (0, 1, 2)],)]
df = spark.createDataFrame(data, ["targeting_values"])
df.show(truncate=False)

然后提取数组元素生成新列:

# 按数组索引逐个提取元素,生成独立列
df_result = df.withColumn("value1", col("targeting_values")[0]) \
              .withColumn("value2", col("targeting_values")[1]) \
              .withColumn("value3", col("targeting_values")[2]) \
              .withColumn("value4", col("targeting_values")[3]) \
              .drop("targeting_values")  # 可选:删除原数组列

df_result.show(truncate=False)

方法二:使用selectExpr简化写法

如果觉得withColumn重复代码多,可以用selectExpr直接指定索引和列名:

df_result = df.selectExpr(
    "targeting_values[0] as value1",
    "targeting_values[1] as value2",
    "targeting_values[2] as value3",
    "targeting_values[3] as value4"
)

df_result.show(truncate=False)

两种方法最终都会输出你需要的结果:每个数组元素对应一个独立列,保留元组结构不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:05:20