Извлечение вложенных объектов в объект с помощью API набора данных в Spark

Я новичок в Spark, я пробую api набора данных и хотел бы знать, можно ли извлечь вложенные объекты в объект с помощью api набора данных.
Например, скажем, у меня есть объект типа A и объект типа B, как показано ниже

case class A(a: String, b: Integer)
case class B(c: Array[A])

У меня есть набор данных, содержащий объекты класса B: Dataset [B]. Я хотел бы применить некоторые преобразования, чтобы получить все объекты типа A в моем окончательном наборе данных: Dataset [A]
Я пробовал это, но это не работает

bs.map(b => b.a.map(x => x))

У кого-нибудь есть идея?

заранее спасибо


person Bryan A    schedule 08.07.2020    source источник


Ответы (1)


Вы можете сначала разбить B's Array[A] на ряды и передать их в DataSet [A]

## 'bs' Dataset 
+--------------------------+
|c                         |
+--------------------------+
|[[value1, 1], [value2, 2]]|
+--------------------------+


val testDF = bs.select(explode($"c"))

## 'testDF' Dataframe
+-----------+
|        col|
+-----------+
|[value1, 1]|
|[value2, 2]|
+-----------+


val asDF = test_df.withColumn("a", col("col.a")).withColumn("b", col("col.b")).drop("col").as[A]

## 'asDF' Dataset
+------+---+
|     a|  b|
+------+---+
|value1|  1|
|value2|  2|
+------+---+
person suresiva    schedule 08.07.2020
comment
Спасибо, что у меня работает;). Я сделал test_df.select ($ col. *). As [A] немного быстрее :) - person Bryan A; 09.07.2020