2016-07-28 10 views
4

Mit Blick auf die select() Funktion auf den Funken DataSet gibt es verschiedenen erzeugen Funktionssignaturen:Spark-Datensatz wählt mit typedcolumn

(c1: TypedColumn[MyClass, U1],c2: TypedColumn[MyClass, U2] ....) 

Dies scheint darauf hinzudeuten, dass ich in der Lage sein sollte, die Mitglieder von MyClass direkt zu referenzieren und Typ sein sicher, aber ich bin mir nicht sicher, wie ...

ds.select("member") natürlich funktioniert .. scheint wie ds.select(_.member) könnte auch irgendwie funktionieren?

Antwort

10

Im Scala DSL für select, gibt es viele Möglichkeiten, um ein Column zu identifizieren:

  • Von Symbol: 'name
  • aus einem String: $"name" oder col(name)
  • aus einem Ausdruck: expr("nvl(name, 'unknown') as renamed")

Um eine TypedColumn von Column Sie zu erhalten Verwenden Sie einfach myCol.as[T].

Zum Beispiel: ds.select(col("name").as[String])

4

Wenn Sie das Äquivalent von ds.select(_.member) nur map verwenden:

case class MyClass(member: MyMember, foo: A, bar: B) 
val ds: DataSet[MyClass] = ??? 
val members: DataSet[MyMember] = ds.map(_.member)