Pysparkの.withColumn内にカスタム条件を書き込む

Nov 23 2020

.withColumnに多くの列があるカスタマイズされた条件を追加する必要があります。私のシナリオはこのようなものです。多くの列にNull値があるかどうかを行ごとに確認し、それらの列名を新しい列に追加する必要があります。私のコードは次のようになります。

df= df.withColumn("MissingColumns",\
    array(\
    when(col("firstName").isNull(),lit("firstName")),\
    when(col("salary").isNull(),lit("salary"))))

問題は、条件に追加する必要のある列がたくさんあることです。そこで、ループとf-stringを使用してカスタマイズし、それを使用してみました。

df = df.withColumn("MissingColumns",condition)

しかし、この状態は機能していません。私が書いた条件はデータ型Stringであるためかもしれません。これを行う効率的な方法はありますか?

回答

1 BenoitDescamps Nov 23 2020 at 15:24

次のように、配列内のリストを解凍する必要があります。

columns = ["firstName","salary"]
condition = array(*[when(col(c).isNull(),lit(c)) for c in columns])