2016-07-28 52 views
4

在上火花數據集有多種生成的函數簽名select()功能展望:星火數據集選擇與typedcolumn

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

這似乎在暗示我應該能夠MyClass的成員直接引用,並類型安全,但我不知道如何...

ds.select("member")當然工程..似乎ds.select(_.member)也可能以某種方式工作?

回答

10

在Scala的DSL爲select,有很多種方法識別一Column

  • 從符號:'name
  • 從字符串:$"name"col(name)
  • 從表達式:expr("nvl(name, 'unknown') as renamed")

要得到一個TypedColumnColumn你只需使用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)