我想了解如何使用新的DataFrame
api的CaseWhen
表达式。
我在文档中看不到任何引用,我唯一看到它的地方是在代码中:https://github.com/apache/spark/blob/v1.4.0/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala L397
我希望能够写这样的东西:
val col = CaseWhen(Seq(
$"a" === lit(1), lit(10),
$"a" === lit(2), lit(15),
...
lit(20)
))
但是这段代码无法编译,因为Seq
是Column
类型而不是Expression
类型
如何正确使用CaseWhen
?
说实话,我不知道CaseWhen
是否打算用作面向用户的API。相反,您应该使用Column
类型的when
和otherwise
方法。使用这些方法,您可以构造一个CaseWhen
列。
val column: Column = //some column
val result: Column = column.
when($"a" === functions.lit(1), 10).
when($"a" === functions.lit(2), 15).
otherwise(20)