这里没有嵌套,因此不需要
otherwise。您所需的全部都是链式的
when:
import spark.implicits._when($"tc" isin ("a", "b"), "Y") .when($"tc" === "a" && $"amt" >= 0, "N")ELSE NULL是隐式的,因此您可以完全省略它。
您使用的模式更适用于
folding数据结构:
val cases = Seq( ($"tc" isin ("a", "b"), "Y"), ($"tc" === "a" && $"amt" >= 0, "N"))其中
when-
otherwise自然遵循递归模式并
null提供基本情况。
cases.foldLeft(lit(null)) { case (acc, (expr, value)) => when(expr, value).otherwise(acc)}请注意,在这种情况下,不可能达到“ N”个结果。如果
tc等于“
a”,它将被第一个子句捕获。如果不是,它将无法同时满足两个谓词,并且默认为
NULL。您应该宁愿:
when($"tc" === "a" && $"amt" >= 0, "N") .when($"tc" isin ("a", "b"), "Y")


