Case When 在 spark DataFrame 中
CaseWhen in spark DataFrame
我想了解如何将 CaseWhen
表达式与新的 DataFrame
api 一起使用。
我在文档中看不到对它的任何引用,我唯一看到它的地方是在代码中:
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)
我想了解如何将 CaseWhen
表达式与新的 DataFrame
api 一起使用。
我在文档中看不到对它的任何引用,我唯一看到它的地方是在代码中: 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)