Читать вложенные данные как класс вложенных дел в Scala - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть данные со схемой:

DummyData
 |-- a: string (nullable = true)
 |-- b: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- b1: string (nullable = true)
 |    |    |-- b2: string (nullable = true)
 |-- c: long (nullable = true)

С классом дела, определенным как:

case class DummyData (a : String, b : List[DummyDataChild], c : Long)
case class DummyDataChild (b1 : String, b2 : String)

Когда я пытаюсь прочитать эти данные в Dataframe, дочерний класс дела читается как GenericRowWithSchema, а не фактическая калибровка регистра, которая ожидается (DummyDataChild в этом сценарии), есть ли в любом случае читать вложенный дочерний объект также как класс case в scala spark?

PS: я знаю, что мы В качестве обходного пути можно извлечь поля из класса GenericRowWithSchema.

1 Ответ

0 голосов
/ 16 апреля 2020

Вы должны иметь возможность использовать встроенные кодировщики для классов дел:

val ds = df.as[DummyData]
df.printSchema
ds.printSchema

Вывод:

ds: org.apache.spark.sql.Dataset[DummyData] = [a: string, b: array<struct<b1:string,b2:string>> ... 1 more field]

root
 |-- a: string (nullable = true)
 |-- b: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- b1: string (nullable = true)
 |    |    |-- b2: string (nullable = true)
 |-- c: long (nullable = false)

root
 |-- a: string (nullable = true)
 |-- b: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- b1: string (nullable = true)
 |    |    |-- b2: string (nullable = true)
 |-- c: long (nullable = false)
...