Как объединиться, когда во всех записях отсутствует столбец? - PullRequest
0 голосов
/ 09 января 2019

Я читаю несколько JSON файлов в кадре данных в Scala. В некоторых файлах отсутствует столбец (например, столбец header), в то время как в других файлах он есть. Я хочу добавить столбец для тех записей, где он не существует, и заполнить его значением по умолчанию "Missing". Как это сделать, не затрагивая записи, в которых уже есть столбец?

Я попробовал приведенный ниже код, однако он работает только в том случае, если по крайней мере одна запись содержит столбец. Если ни одна из записей не имеет столбца, он выдает ошибку, говоря, что столбец Seq_num не найден:

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

Ошибка: невозможно разрешить 'Seq_num' для заданных столбцов ввода

1 Ответ

0 голосов
/ 11 января 2019

Определите функцию, которая сначала проверяет, существует ли столбец в кадре данных. Если столбец не существует, просто добавьте его. Если он уже существует, используйте 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), но в этом случае вложенные столбцы не поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...