PySpark SQL“或”条件以意外的方式与日期一起工作

问题描述 投票:0回答:0

我正在使用 pyspark sql 在 pyspark 上运行查询,但我遇到了奇怪的行为。 我有这样的声明:

WHERE `foobar`.`business_date` = '2020-01-01'
OR `foobar_2`.`business_date` = '2020-01-01'

上面 where 语句过滤掉了我所有的数据,导致空 df 但奇怪的是,当我从 OR 更改为 AND 我不再得到空数据框,而是正确的结果,这对我来说没有意义,因为 OR 应该是更具包容性? pyspark sql 中的 OR 是否有不同的运算符?

空 df:

spark.sql("""
select *
from `foobar`
full outer join `foobar_connector` on (`foobar_connector`.`some_id` = `foobar`.`other_id`)
full outer join `foobar_2` on (`foobar_connector`.`some_other_id` = `foobar_2`.`other_id`)
WHERE `foobar`.`business_date` = '2020-01-01'
OR `foobar_2`.`business_date` = '2020-01-01'
""").show()

DF 包含结果:

spark.sql("""
select *
from `foobar`
full outer join `foobar_connector` on (`foobar_connector`.`some_id` = `foobar`.`other_id`)
full outer join `foobar_2` on (`foobar_connector`.`some_other_id` = `foobar_2`.`other_id`)
WHERE `foobar`.`business_date` = '2020-01-01'
AND `foobar_2`.`business_date` = '2020-01-01'
""").show()

这种行为的原因可能是什么?根据我的理解,如果“AND 条件”返回非空 df,那么“OR 条件”不应该返回空 df,它应该重新运行相同数量或更多的记录。


更新 1


我发现如果我改变声明从

WHERE `foobar`.`business_date` = '2020-01-01'
OR `foobar_2`.`business_date` = '2020-01-01'

WHERE `foobar`.`business_date` = DATE('2020-01-01')
OR `foobar_2`.`business_date` = DATE('2020-01-01')

然后我得到了预期的行为,但我不知道为什么它适用于 AND 而无需显式转换

python sql apache-spark pyspark where-clause
© www.soinside.com 2019 - 2024. All rights reserved.