Способ работы Datasets
в Spark заключается в том, что если вы примените к ним любое преобразование, они преобразуются в Dataframe
, который внутренне равен Dataset[Row]
, и это поведение является только логическим.Позвольте мне объяснить это вам на примере.
Предположим, у вас есть следующий класс дел.
case class Person(SSN: Int, Name: String)
и у вас есть Dataset[Person]
со ссылкой people
Теперь, если вы выполните people.withColumn("row_number", row_number())
, схема этого больше не соответствует классу Person
и должна быть преобразована в общий тип Row
, следовательно, Dataset[Person]
становится Dataset[Row] / Dataframe
.
Так что если вы хотитедобавьте row_number и все еще хотите, чтобы оно было Dataset[Person]
. Я бы предложил добавить дополнительное поле к вашему классу дел.
case class Person(SSN: Int, Name: String, row_number: Long)
Таким образом, при добавлении нового столбца row_number
каждая строка будет соответствоватьк классу дела Person
и не будет преобразован в общий тип Row
.