#scala #apache-spark #pyspark #apache-spark-sql #spark-streaming
#scala #apache-spark #pyspark #apache-spark-sql #искровая передача
Вопрос:
Дан фрейм данных со следующей схемой. Проблема в том, что фрейм данных является динамическим, как и его поле. Таким образом, вы можете предварительно принять заданную схему.
root
|-- a: string (nullable = true)
|-- b: string (nullable = true)
|-- c: string (nullable = true)
|-- a: string (nullable = true)
|-- b: long (nullable = true)
|-- c: long (nullable = true)
|-- d: long (nullable = true)
|-- a: long (nullable = true)
Отображается следующая ошибка :-
Found duplicate column(s) in table definition
как мы должны переименовать имя столбца, чтобы устранить двусмысленность
Комментарии:
1. вы можете просто использовать toDF после чтения фрейма данных и передать явные имена столбцов.
Ответ №1:
Вот как вы можете переименовать его
import spark.implicits._
val df = Seq(
("a", 1, "a"),
("a", 1, "a"),
("a", 1, "a")
).toDF("a", "x", "a")
val columns = List("a", "b", "c")
val newDF = df.toDF(columns: _*)
newDF.show(false)
newDF.printSchema()
Новый вывод:
--- --- ---
|a |b |c |
--- --- ---
|a |1 |a |
|a |1 |a |
|a |1 |a |
--- --- ---
Новая схема:
root
|-- a: string (nullable = true)
|-- b: integer (nullable = false)
|-- c: string (nullable = true)
Комментарии:
1. То же самое работает с python:
df.toDF(*["a", "b", "c"])
2. Проблема в том, что фрейм данных является динамическим, как и его поле. Таким образом, вы можете предварительно принять заданную схему.