在 Pyspark 中的 .withColumn 中编写自定义条件

Posted

技术标签:

【中文标题】在 Pyspark 中的 .withColumn 中编写自定义条件【英文标题】:Writing custom condition inside .withColumn in Pyspark 【发布时间】:2020-11-23 14:49:06 【问题描述】:

我必须添加一个自定义条件,它在 .withColumn 中有很多列。 我的场景有点像这样。如果它们具有 Null 值,我必须逐行检查许多列,并将这些列名添加到新列中。我的代码看起来有点像这样:

df= df.withColumn("MissingColumns",\
    array(\
    when(col("firstName").isNull(),lit("firstName")),\
    when(col("salary").isNull(),lit("salary"))))

问题是我有很多列必须添加到条件中。所以我尝试使用循环和 f 字符串来自定义它并尝试使用它。

df = df.withColumn("MissingColumns",condition)

但是这种情况不起作用。可能是因为,我写的条件是数据类型String。 有什么有效的方法吗?

【问题讨论】:

【参考方案1】:

您需要在数组中解压缩列表,如下所示:

columns = ["firstName","salary"]
condition = array(*[when(col(c).isNull(),lit(c)) for c in columns])

【讨论】:

以上是关于在 Pyspark 中的 .withColumn 中编写自定义条件的主要内容,如果未能解决你的问题,请参考以下文章

在 Pyspark 中的多个列上使用相同的函数重复调用 withColumn()

传递列表项作为 withColumn (Pyspark) 的输入

为啥'withColumn'在pyspark中需要这么长时间?

python 在PySpark中为withColumn编写UDF

python 在PySpark中为withColumn编写UDF

pyspark Column 不可使用 withColumn 进行迭代