我有一个列名列表,每次都不同。列名称存储在列表中。因此,我需要将列表中的列名(在下面的示例中,其ID和ProgramID)传递给when子句,并检查两个列是否都包含空值。请帮我解决问题。
Pyspark代码:
ColumnList = ['id','programid']
joinSrcTgt.withColumn(
'action',
when(joinSrcTgt.id.isNull() & joinSrcTgt.prgmid.isNull(),'insert')
)
答案 0 :(得分:1)
您可以使用列表推导来检查每一列是否为空:
[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'
)
)