Лучший способ использовать case class
с кадрами данных - это разрешить Spark преобразовывать его в набор данных с помощью метода .as()
. Пока ваш класс case имеет атрибуты, которые соответствуют всем именам столбцов, он должен работать очень легко.
case class WeekYear(week: Int, year: Int)
val df = spark.createDataset(Seq((1, 1), (2, 2), (3, 3))).toDF("week", "year")
val ds = df.as[WeekYear]
ds.show()
, который обеспечивает Dataset[WeekYear]
, который выглядит следующим образом:
+----+----+
|week|year|
+----+----+
| 1| 1|
| 2| 2|
| 3| 3|
+----+----+
Вы можете использовать некоторые более сложные вложенные классы, но для этого вы должны начать работать с Encoders
, чтобы искра знала, как конвертировать туда и обратно.
Spark делает некоторые неявные преобразования, поэтому ds
может по-прежнему выглядеть как Dataframe
, но на самом деле это строго типизированный Dataset[WeekYear]
вместо Dataset[Row]
с произвольными столбцами. Вы оперируете им аналогично RDD
. Затем просто возьмите .first()
один из них, и вы уже получите нужный вам тип.
val resultWeekYear = ds.first