【问题标题】:Spark: How to skip second condition in OR constructionSpark:如何在 OR 构造中跳过第二个条件
【发布时间】:2022-01-20 05:58:34
【问题描述】:

当我尝试在 Spark where 函数中检查 OR 条件时,即使第一个条件为真,也会执行第二个条件。

如何跳过第二个条件的检查?

df.
...
.where(
  (
    lit(lastLoadingDate).isNull
    .or(
         col(srcDTTM) > lastLoadingDate.format(formatterDTTM)
       )
  )
  && col(SrcDTTM) <= currentLoadingDate.format(formatterDTTM)
)

我什至尝试检查下一个表达式:

df.
...
.where(
  (
    lit(true)
    .or(
         col(srcDTTM) > lastLoadingDate.format(formatterDTTM)
       )
  )
  && col(SrcDTTM) <= currentLoadingDate.format(formatterDTTM)
)

但第二个条件:

col(srcDTTM) &gt; lastLoadingDate.format(formatterDTTM)

总是被执行。

【问题讨论】:

  • 总是被执行”是什么意思?

标签: apache-spark apache-spark-sql


【解决方案1】:

跳过第二个条件的检查可能会导致数据不完整,因为是or判断。如果第二个条件为真第一个条件为假,结果集中的数据量会增加。

【讨论】:

  • 但是如果第一个条件为真,为什么要检查第二个条件?这不是多余的吗?当第一个为真时,我需要跳过第二个条件。我可以这样吗?或者也许有其他方法可以在执行格式化功能之前检查 Null 值上的变量。
  • 您可以尝试类似以下的逻辑:case when cond1 then result1 when cond2 then result2 end。当cond1为真时,不输入cond2,否则输入cond2
【解决方案2】:

当第一个条件为真时,检查 OR 判断中的第二个条件不会有任何区别。假设添加另一个条件或使用任何其他函数来跳过第二个条件检查。如果第一个检查为假,则条件检查第一个是真还是假,然后进入 OR 判断的第二部分。它会像 3 个条件而不是 2 个。最好直接使用 OR 判断。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2020-06-25
    • 1970-01-01
    相关资源
    最近更新 更多