2016-07-28 6 views
4

Глядя на select() функции на свече DataSet существуют различные сгенерированные функции подписи:Спарк Dataset выберите с typedcolumn

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

Это как бы намекает, что я должен быть в состоянии ссылаться на членов MyClass непосредственно и быть типа безопасно, но я не знаю, как ...

ds.select("member"), конечно, работает .. похоже ds.select(_.member) также может работать как-то?

ответ

10

В DSL Scala для select, существует множество способов идентификации Column:

  • От символа: 'name
  • Из строки: $"name" или col(name)
  • Из выражения: expr("nvl(name, 'unknown') as renamed")

Чтобы получить TypedColumn от Column, вы просто используйте myCol.as[T].

Например: ds.select(col("name").as[String])

4

Если вы хотите эквивалент ds.select(_.member) просто использовать map:

case class MyClass(member: MyMember, foo: A, bar: B) 
val ds: DataSet[MyClass] = ??? 
val members: DataSet[MyMember] = ds.map(_.member) 
Смежные вопросы