Извлечение вложенных объектов в объект с помощью API набора данных в Spark - PullRequest
0 голосов
/ 08 июля 2020

Я новичок в 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))

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

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

1 Ответ

0 голосов
/ 09 июля 2020

Вы можете сначала разбить 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|
+------+---+
...