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

PySpark实现:检测数组是否含列表元素并将列表转为列

解决PySpark中嵌套数组元素的存在性判断并生成对应列

你的Col1是嵌套数组(数组内嵌套数组),因此需要先将其展平为一维数组,再逐个判断目标列表中的元素是否存在,进而生成对应列。以下是具体实现方案:

步骤1:导入依赖并定义目标列表

from pyspark.sql import functions as F

# 你的目标元素列表
target_list = ["A", "B", "C"]

步骤2:循环生成判断列

遍历目标列表中的每个元素,为其创建新列,判断该元素是否存在于展平后的Col1中,并用1/0表示存在/不存在:

result_df = data_frame
for item in target_list:
    result_df = result_df.withColumn(
        item,
        F.when(F.array_contains(F.flatten(F.col("Col1")), F.lit(item)), 1).otherwise(0)
    )

代码解释

  • F.flatten(F.col("Col1")):将嵌套数组(如[["A", "B", "E", "F"]])展平为一维数组["A", "B", "E", "F"],这是使用array_contains的前提(该函数仅支持一维数组的元素判断)。
  • F.array_contains(..., F.lit(item)):检查展平后的数组中是否包含当前目标元素,返回布尔值。
  • F.when(..., 1).otherwise(0):将布尔结果转换为整数1(存在)或0(不存在),作为新列的取值。

最终输出

运行上述代码后,result_df的结构与内容将完全符合你的期望:

IdCol1ABC
1[["A", "B", "E", "F"]]110
2[["A", "D", "E"]]100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:00:55