Scala spark数据帧中的情况
我想了解如何在新的DataFrameAPI中使用CaseWhen表达式 我在文档中看不到对它的任何引用,我看到它的唯一地方是在代码中: 我希望能够写出这样的东西:Scala spark数据帧中的情况,scala,apache-spark,apache-spark-sql,apache-spark-1.4,Scala,Apache Spark,Apache Spark Sql,Apache Spark 1.4,我想了解如何在新的DataFrameAPI中使用CaseWhen表达式 我在文档中看不到对它的任何引用,我看到它的唯一地方是在代码中: 我希望能够写出这样的东西: val col = CaseWhen(Seq( $"a" === lit(1), lit(10), $"a" === lit(2), lit(15), ... lit(20) )) 但这段代码不会编译,因为Seq的类型是Column而不是Expression 使用CaseWhen的正确方法是什么?老
val col = CaseWhen(Seq(
$"a" === lit(1), lit(10),
$"a" === lit(2), lit(15),
...
lit(20)
))
但这段代码不会编译,因为Seq的类型是Column而不是Expression
使用CaseWhen的正确方法是什么?老实说,我不知道CaseWhen是否打算用作面向用户的API。相反,您应该使用列类型的when和other方法。使用这些方法,您可以构造CaseWhen列 val column:column=//某个列 val结果:列=列。 当$a==functions.lit1时,为10。 当$a==functions.lit2时,为15。 否则20
老实说,我不知道CaseWhen是否打算用作面向用户的API。相反,您应该使用列类型的when和other方法。使用这些方法,您可以构造CaseWhen列 val column:column=//某个列 val结果:列=列。 当$a==functions.lit1时,为10。 当$a==functions.lit2时,为15。 否则20
您可能是对的,尽管它不是私有的[slq],也没有标记为@DeveloperApi。我不能做column.expr,因为expr是受保护的。你说得对。我错过了expr被保护的消息。但我找到了另一个解决办法。我更新了答案。我希望现在可以这样做。你可能是对的,尽管它不是私有的[slq],也不是标记为@DeveloperApi的。我不能做column.expr,因为expr是受保护的。你说得对。我错过了expr被保护的消息。但我找到了另一个解决办法。我更新了答案。我希望现在能奏效。