如何在pyspark中执行AND/ALSO查询?我希望两个条件都满足才能过滤结果。
原始 Dataframe :
df.count()
4105
第一个条件未找到任何记录:
df.filter((df.created_date != 'add')).count()
4105
因此,我希望这里的AND子句返回4105
,但是它继续过滤df.lastUpdatedDate
:
df.filter((df.created_date != 'add') & (df.lastUpdatedDate != '2022-12-21')).count()
3861
对我来说,3861
是OR子句的结果,我该如何解决这个问题?lastUpdatedDate
是一个基于.explain()的分区过滤器,所以这可能与这些结果有关?
...分区筛选器:[不为空(最后更新日期#26),NOT(最后更新日期#26 = 2022年12月21日)],推送过滤器:[不为空(创建日期),不等于(创建日期,添加))],读取架构...
1条答案
按热度按时间b4lqfgs41#
根据我们在评论中的对话-您的要求是过滤掉(df. created_date!='add')&(df. lastUpdatedDate!='2022 - 12 - 21')
您的困惑似乎在于方法的名称,即filter,而应考虑它的位置
Where或Filter by definition的工作原理与SQL Where子句相同,即保留表达式返回true的行,并丢弃其余行。
例如,考虑一个 Dataframe
下面的过滤器将返回一个新的Dataframe,其中仅包含主题为历史记录的行,即表达式返回true的行(即过滤掉false的行)
或
输出:
因此,在您的情况下,您可能希望否定语句以获得所需的结果。
即使用等于代替不等于
这意味着保留两个语句都为True的行,并过滤掉其中任何一个为False的行
告诉我这个是否管用