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)
))

但是这段代码无法编译,因为 SeqColumn 类型而不是 Expression

CaseWhen的正确使用方法是什么?

老实说,我不知道 CaseWhen 是否打算用作面向 API 的用户。相反,您应该使用 Column 类型的 whenotherwise 方法。使用这些方法,您可以构建一个 CaseWhen 列。

val column: Column = //some column

val result: Column = column.
  when($"a" === functions.lit(1), 10).
  when($"a" === functions.lit(2), 15).
  otherwise(20)