Wie um die Karte struct im DataFrame zu Fall Klasse?

Irgendwann in meiner Anwendung habe ich einen DataFrame mit einem Struct-Feld erstellt von Fall Klasse. Jetzt möchte ich cast/anzeigen es wieder der Fall-Klasse Typ:

import spark.implicits._
case class Location(lat: Double, lon: Double)

scala> Seq((10, Location(35, 25)), (20, Location(45, 35))).toDF
res25: org.apache.spark.sql.DataFrame = [_1: int, _2: struct<lat: double, lon: double>]

scala> res25.printSchema
root
 |-- _1: integer (nullable = false)
 |-- _2: struct (nullable = true)
 |    |-- lat: double (nullable = false)
 |    |-- lon: double (nullable = false)

Und basic:

res25.map(r => {
   Location(r.getStruct(1).getDouble(0), r.getStruct(1).getDouble(1))
}).show(1)

Sieht wirklich schmutzig
Gibt es eine einfachere Möglichkeit?

InformationsquelleAutor Atais | 2017-04-08
Schreibe einen Kommentar