首页 > 解决方案 > 当所有记录都缺少一列时如何合并?

问题描述

我正在将多个JSON文件读入 Scala 中的数据框中。一些文件缺少一列(例如 column header),而其他文件有它。我想为那些不存在的记录添加列并填充默认值"Missing"。如何在不影响已有该列的记录的情况下做到这一点?

我尝试了下面的代码,但是,它仅在至少一条记录具有该列时才有效。如果所有记录都没有该列,则会错误提示Seq_num未找到该列:

df.withColumn("Seq_num", coalesce(col("Seq_num"),lit("0")))

错误: 无法解析“ Seq_num”给定的输入列

标签: jsonscalaapache-sparkdataframe

解决方案


定义一个函数,首先检查该列是否存在于数据框中。如果该列不存在,只需添加它。如果它已经存在,那么coalesce像以前一样使用。

这可以按如下方式完成:

def coalesceColumn(df: DataFrame, column: String, default: String) = {
  Try(df(column)).toOption match {
    case Some(_) => df.withColumn(column, coalesce(col(column), lit(default)))
    case _ => df.withColumn(column, lit(default))
  }
}

val df2 = coalesceColumn(df, "Seq_num", "0")

请注意,可以使用df.columns.contains(column)进行列检查,但在这种情况下不支持嵌套列。


推荐阅读