我正在将多个JSON
文件读入Scala的数据框中。一些文件缺少一列(例如列header
),而其他文件则缺少。
我想为那些不存在的记录添加该列,并使用默认值"Missing"
进行填充。如何在不影响已具有该列的记录的情况下做到这一点?
我尝试了以下代码,但是,仅当至少一个记录具有该列时,它才起作用。如果没有记录包含该列,则会出错,提示找不到列Seq_num
:
df.withColumn("Seq_num", coalesce(col("Seq_num"),lit("0")))
错误:给定输入列无法解析'
Seq_num
'
答案 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)
进行列检查,但在这种情况下,不支持嵌套列。