当所有记录都缺少列时如何合并?

时间:2019-01-09 13:24:14

标签: json scala apache-spark dataframe

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

我尝试了以下代码,但是,仅当至少一个记录具有该列时,它才起作用。如果没有记录包含该列,则会出错,提示找不到列Seq_num

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

错误:给定输入列无法解析'Seq_num'

1 个答案:

答案 0 :(得分:1)

定义一个函数,该函数首先检查该列是否存在于数据框中。如果该列不存在,只需添加它。如果已经存在,请像以前一样使用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)进行列检查,但在这种情况下,不支持嵌套列。