该特定 Dataframe 每天更新一次,更新内容包括“客户ID”、“状态”和更新发生的“日期”,示例如下:example
有些客户端每天都会收到更新,有些则不会。有些客户端可能会在几天内将状态从“否”更改为“是”,反之亦然
状态为“是”时,可通过以下方式获取:
df = df \
.select('id','status','date') \
.filter(
(col('date') >= '2022-10-01') &
(col('date') <= '2022-10-31') &
(col(status) == "yes"))
第二个选择必须没有出现在“是”查询中的ID。每个示例见ID“123”,如果我排除了所有带有“是”的行,我仍然在查询的“否”部分计算该客户。
尝试使用OVER函数基于ID创建一个标志,以排除我已经选择的内容,然后应用过滤器,但它不起作用,pyspark说该表达式在窗口函数中不受支持。
第一次
1条答案
按热度按时间iibxawm41#
我有一个可能工作的解决方案,但我不确定它是否在时间和资源方面的好解决方案,所以如果有人知道如何改进它,请留下评论。目前我无法找出其他任何东西,但也许它会对你有用。我有一种感觉,有一些技巧,我不知道做得更聪明:D
dfs不需要单独的变量,我添加它是为了使它更具描述性。
分步说明:
示例作业的输出: