首页 > 解决方案 > 如果数据框列尚不存在,是否有一种计算成本较低的方法来添加数据框列?

问题描述

我有一个带有可选字段 X 的 Spark Dataframe。如果该字段根本不存在,我想创建它并将其设置为等于 A 列。如果该字段存在但为空,我想将其设置为等于列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"))

有没有更高效的方法来做到这一点?

标签: scalaapache-sparkdataframe

解决方案


我不知道它是否更高效,但最好只检查而不捕获异常,例如:

val dfWithColX = if (df.columns.contains("X")) {
  df.withColumn("X", coalesce('X, 'A))
} else {
  df.withColumn("X", 'A)
}

推荐阅读