#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 если у вас другое требование, либо отредактируйте его в своем вопросе, либо опубликуйте новый вопрос, если новые требования достаточно отличаются от исходного вопроса. Не задавайте сразу несколько разных вопросов и не публикуйте код в комментариях.