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

Spark DataFrame拆分元素数量可变列生成多列的实现问题

Spark DataFrame 新增Status与Code列实现方案

完全不需要修改原数据集,直接基于你已经拆分得到的数组列LongColumn即可实现需求,以下是扩展后的完整代码:

from pyspark.sql import functions as F

# 基于原有代码扩展新增列
out_df = (df
          .withColumn('LongColumn', F.split('LongColumn', '\.'))
          # 新增Code列:取拆分后数组的第二个元素(数组索引从0开始,对应索引1)
          .withColumn('Code', F.col('LongColumn')[1])
          # 新增Status列:判断数组中是否包含"approved"
          .withColumn('Status', 
                      F.when(F.array_contains(F.col('LongColumn'), 'approved'), 'approved')
                       .otherwise('unapproved'))
          # 原有逻辑保留的列
          .withColumn('Category', F.expr('LongColumn[size(LongColumn) - 4]'))
          .withColumn('Letter', F.expr('LongColumn[size(LongColumn) - 3]'))
          .withColumn('dataset', F.expr('LongColumn[size(LongColumn) - 2]'))
          # 删除临时的数组列LongColumn
          .drop('LongColumn'))

代码逻辑说明:

  • Code列:拆分后的数组索引从0开始,第二个元素对应索引1,直接通过F.col('LongColumn')[1]取值即可。
  • Status列:利用Spark内置函数array_contains判断数组中是否存在approved,结合when-otherwise实现条件赋值,无需关心approved的具体位置。

最终输出结果:

CodeStatusCategoryLetterdataset
ABCapprovedCategory1BetaMyResults
DEFunapprovedCategory2AlphaMyResults
ABCunapprovedCategory6GammaMyResults
GHIapprovedCategory1AlphaMyResults

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:24:18