我有一个带有可选字段X的Spark数据框。如果该字段根本不存在,我想创建它并将其设置为等于A列。如果该字段存在但为空,那么我想对其进行设置等于A列。如果该字段存在且不为null,我想使用其中的值。
我目前正在这样做:
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"))
是否有更高效的方法?
答案 0 :(得分:0)
我不知道它是否更有效,但是最好检查一下而不捕获异常,例如:
val dfWithColX = if (df.columns.contains("X")) {
df.withColumn("X", coalesce('X, 'A))
} else {
df.withColumn("X", 'A)
}