json - 当所有记录都缺少一列时如何合并?
问题描述
我正在将多个JSON
文件读入 Scala 中的数据框中。一些文件缺少一列(例如 column header
),而其他文件有它。我想为那些不存在的记录添加列并填充默认值"Missing"
。如何在不影响已有该列的记录的情况下做到这一点?
我尝试了下面的代码,但是,它仅在至少一条记录具有该列时才有效。如果所有记录都没有该列,则会错误提示Seq_num
未找到该列:
df.withColumn("Seq_num", coalesce(col("Seq_num"),lit("0")))
错误: 无法解析“
Seq_num
”给定的输入列
解决方案
定义一个函数,首先检查该列是否存在于数据框中。如果该列不存在,只需添加它。如果它已经存在,那么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)
进行列检查,但在这种情况下不支持嵌套列。
推荐阅读
- javascript - 如何使 Javascript Tampermonkey 脚本搜索相同单词的小写和大写字符
- python - 在 Python 中使用 xml 正文发送 POST 请求时在 xml 中设置属性值
- assembly - 通过将 EFLAGS.VM 设置为 1 从 32 位保护模式切换到 v8086 模式时出现问题
- r - 将数据框的列与所有变量组合合并
- azure - azure queuetrigger中的单例未按预期工作
- c++ - Assertion error when trying to include textures SDL2 c++
- python - 如何在句子级别对段落中的文本进行一次热编码?
- node-red - 在一个新节点中加入多个节点
- bash - 添加到 bash 脚本中的日期
- python - 如何在专注于更好的准确性的同时做出更好的曲线拟合