我有一个列名列表,每次都会变化。列名存储在列表中。因此,我需要将列表中的列名(在下面的示例中是 id 和 programid(传递给 when 子句,并检查两列是否都包含 null 值。请帮助我解决问题。
Pyspark Code:
ColumnList = ['id','programid']
joinSrcTgt.withColumn(
'action',
when(joinSrcTgt.id.isNull() & joinSrcTgt.prgmid.isNull(),'insert')
)
您可以使用列表推导来检查每列是否为 null:
[col(c).isNull() for c in ColumnList]
然后,您可以使用functools.reduce
按位和(&
(将这些放在一起:
from functools import reduce
from pyspark.sql.functions import col, when
ColumnList = ['id','programid']
joinSrcTgt.withColumn(
'action',
when(
reduce(lambda a, b: a&b, [col(c).isNull() for c in ColumnList]),
'insert'
)
)