Передача имен столбцов из списка

#apache-spark #pyspark #apache-spark-sql #pyspark-sql

#apache-spark #pyspark #apache-spark-sql

Вопрос:

У меня есть список имен столбцов, который меняется каждый раз. Имена столбцов хранятся в списке. Итак, мне нужно передать имена столбцов из списка (в приведенном ниже примере его id и programid) в предложение when и проверить, содержат ли оба столбца нулевые значения. Пожалуйста, помогите мне с решением.

Код Pyspark:

 ColumnList = ['id','programid']

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

Ответ №1:

Вы можете использовать понимание списка, чтобы проверить, является ли каждый столбец нулевым:

 [col(c).isNull() for c in ColumnList]
  

Затем вы можете использовать functools.reduce для побитового-и ( amp; ) их вместе:

 from functools import reduce
from pyspark.sql.functions import col, when

ColumnList = ['id','programid']

joinSrcTgt.withColumn(
    'action', 
    when(
        reduce(lambda a, b: aamp;b, [col(c).isNull() for c in ColumnList]),
        'insert'
    )
)
  

Комментарии:

1. Спасибо, Пол. Это сработало. Не могли бы вы также рассказать мне, как включить приведенное ниже условие в предложение when. Я хочу сравнить столбцы, присутствующие в 2 списках. column1 = [‘id’, ‘programid’] column2 = [‘src_id’, src_programid’] joinSrcTgt.withColumn(‘действие’, когда((joinSrcTgt.src_id == joinSrcTgt.id ) amp; (joinSrcTgt.src_programid == joinSrcTgt.programid) amp; (joinSrcTgt.src_checksum != joinSrcTgt.контрольная сумма),’upsert’)

2. @Shivhar если у вас другое требование, либо отредактируйте его в своем вопросе, либо опубликуйте новый вопрос, если новые требования достаточно отличаются от исходного вопроса. Не задавайте сразу несколько разных вопросов и не публикуйте код в комментариях.