У меня есть Spark Dataframe с необязательным полем X. Если поле вообще не существует, я хочу создать его и установить равным столбцу A. Если поле существует, но имеет значение NULL, я хочу установить его равным столбцу A. Если поле существует и не равно нулю, я хочу использовать значение, уже находящееся внутри него.
Сейчас я делаю это так:
val df = spark.read.json("records.json")
val dfWithColX = if (Try(df("X")).isSuccess) {
df.withColumn("X", when(col("X").isNull, col("A")).otherwise(col("X")))
} else df.withColumn("X", col("A"))
Есть ли более эффективный способ сделать это?
Я не знаю, будет ли он более производительным, но, кажется, лучше просто проверить, не перехватив исключения, например:
val dfWithColX = if (df.columns.contains("X")) {
df.withColumn("X", coalesce('X, 'A))
} else {
df.withColumn("X", 'A)
}