从列表中传递列名

时间:2019-04-11 21:44:42

标签: apache-spark pyspark apache-spark-sql pyspark-sql

 

我有一个列名列表,每次都不同。列名称存储在列表中。因此,我需要将列表中的列名(在下面的示例中,其ID和ProgramID)传递给when子句,并检查两个列是否都包含空值。请帮我解决问题。

Pyspark代码:

ColumnList = ['id','programid']

joinSrcTgt.withColumn(
    'action', 
    when(joinSrcTgt.id.isNull() & joinSrcTgt.prgmid.isNull(),'insert')
)

1 个答案:

答案 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'
    )
)