Я пытаюсь динамически добавить столбцы в DataFrame из Seq of String.
Вот пример: исходный dataframe имеет вид:
+-----+---+----+---+---+
|id | A | B | C | D |
+-----+---+----+---+---+
|1 |toto|tata|titi| |
|2 |bla |blo | | |
|3 |b | c | a | d |
+-----+---+----+---+---+
У меня также есть Seq Строка, которая содержит название столбцов, которые я хочу добавить. Если в исходном DataFrame столбец уже существует, он должен иметь некоторые различия, как показано ниже:
Seq выглядит следующим образом:
val columns = Seq("A", "B", "F", "G", "H")
Ожидаемое значение:
+-----+---+----+---+---+---+---+---+
|id | A | B | C | D | F | G | H |
+-----+---+----+---+---+---+---+---+
|1 |toto|tata|titi|tutu|null|null|null
|2 |bla |blo | | |null|null|null|
|3 |b | c | a | d |null|null|null|
+-----+---+----+---+---+---+---+---+
То, что я сделал до сих пор, выглядит примерно так:
val difference = columns diff sourceDF.columns
val finalDF = difference.foldLeft(sourceDF)((df, field) => if (!sourceDF.columns.contains(field)) df.withColumn(field, lit(null))) else df)
.select(columns.head, columns.tail:_*)
Но я не могу понять, как сделать это с помощью Spark более эффективно, чтобы было проще и проще читать ...
Заранее спасибо