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
相关产品推荐
相关产品推荐

