scala - 如果数据框列尚不存在,是否有一种计算成本较低的方法来添加数据框列?
问题描述
我有一个带有可选字段 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"))
有没有更高效的方法来做到这一点?
解决方案
我不知道它是否更高效,但最好只检查而不捕获异常,例如:
val dfWithColX = if (df.columns.contains("X")) {
df.withColumn("X", coalesce('X, 'A))
} else {
df.withColumn("X", 'A)
}
推荐阅读
- python - 获取元素硒python的标签
- javascript - 制作不和谐机器人时如何获取目标用户的标签?
- android - app:srcCompat 是否仍然需要最低 Android 支持 5.0?
- html - 当我放大时背景图像剪切
- aws-lambda - 如何动态地将 arn cognito 添加到 lambda?
- django - 如何为 ModelResource 中的 row_result 差异列表强制执行静态顺序?
- azure - NSG 是否适用于子网的服务端点
- java - gradle build 尝试合并 dex 档案失败
- python - 如何从 csv 文件的某些列中删除 NaN 值?
- python - 为什么带有稀疏列的 pandas 数据框会占用更多内存?