我正在使用 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 而无需显式转换