【问题标题】:Spark Scala case when with multiple conditions具有多个条件时的 Spark Scala 案例
【发布时间】:2020-11-12 04:08:10
【问题描述】:

我正在尝试在我拥有的 DF 上做一个案例,但我遇到了一个错误。我想用内置的 spark 函数来实现这个——withcolumn,when,否则:

CASE WHEN vehicle="BMW" 
AND MODEL IN ("2020","2019","2018","2017") 
AND value> 100000 THEN 1
ELSE 0 END AS NEW_COLUMN

目前我有这个

DF.withColumn(NEW_COLUMN, when(col(vehicle) === "BMW" 
and col(model) isin(listOfYears:_*) 
and col(value) > 100000, 1).otherwise(0))

但由于数据类型不匹配(布尔值和字符串)而出现错误...我了解我的条件返回布尔值和字符串,这导致了错误。执行这样的案例的正确语法是什么?另外,我使用 && 而不是 and 但第三个 && 给了我一个“无法解析符号 &&”

感谢您的帮助!

【问题讨论】:

  • 所以NEW_COLUMNvehiclemodel等是String类型的变量吗?如果是这样,则此代码运行良好。你有 implicits 导入了吗?

标签: scala dataframe apache-spark case


【解决方案1】:

我认为 && 是正确的 - 使用内置的 spark 函数,所有表达式都是 Column 类型,检查 API 看起来 && 是正确的并且应该可以正常工作。是否可以像操作顺序问题一样简单,在每个布尔条件周围都需要括号?函数/“运算符”isinprecedence&& 低,这可能会出错。

【讨论】:

  • 是括号的原因哈哈,我不知道。谢谢!它现在可以使用 && 而不是显式的 and。
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多