Как упоминалось в комментариях, я думаю, что менее подверженным ошибкам методом было бы изменить схему входных данных.
Тем не менее, если вы ищете быстрый обходной путь, вы можете просто проиндексировать дублированные имена столбцов.
Например, давайте создадим фрейм данных с тремя id
столбцами.
val df = spark.range(3)
.select('id * 2 as "id", 'id * 3 as "x", 'id, 'id * 4 as "y", 'id)
df.show
+---+---+---+---+---+
| id| x| id| y| id|
+---+---+---+---+---+
| 0| 0| 0| 0| 0|
| 2| 3| 1| 4| 1|
| 4| 6| 2| 8| 2|
+---+---+---+---+---+
Тогда я могу использовать toDF
для установки новых имен столбцов. Давайте рассмотрим, что я знаю, что только id
дублируется. Если мы этого не сделаем, добавить дополнительную логику, чтобы выяснить, какие столбцы дублируются, не составит большого труда.
var i = -1
val names = df.columns.map( n =>
if(n == "id") {
i+=1
s"id_$i"
} else n )
val new_df = df.toDF(names : _*)
new_df.show
+----+---+----+---+----+
|id_0| x|id_1| y|id_2|
+----+---+----+---+----+
| 0| 0| 0| 0| 0|
| 2| 3| 1| 4| 1|
| 4| 6| 2| 8| 2|
+----+---+----+---+----+