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的结构与内容将完全符合你的期望:
| Id | Col1 | A | B | C |
|---|---|---|---|---|
| 1 | [["A", "B", "E", "F"]] | 1 | 1 | 0 |
| 2 | [["A", "D", "E"]] | 1 | 0 | 0 |
内容的提问来源于stack exchange,提问作者Jessie
相关产品推荐
相关产品推荐

