上下文:我有一个包含登录时间的大表。我想计算在指定时间段内(例如3600秒)的滚动登录次数。
在SQL / HQL中,我将其指定为:
SELECT id, logon_time, COUNT(*) OVER(
PARTITION BY id ORDER BY logon_time
RANGE BETWEEN 3600 PRECEDING AND CURRENT ROW) as window_count
FROM df
作为sparklyr中的一种解决方法,我们可以将其写为:
df %>%
mutate(window_count = sql('COUNT(*) OVER(
PARTITION BY id ORDER BY logon_time
RANGE BETWEEN 3600 PRECEDING AND CURRENT ROW'))
我想知道是否存在实现这一目标的闪烁/快速方式。 有关将“window_frame”函数添加到dbplyr的This issue看起来很有希望,但是我找不到指定“范围之间”的方法,下面的操作只生成“行之间”窗口:
df %>%
group_by(id) %>%
window_frame(-3600, 0) %>%
window_order(logon_time) %>%
mutate(windowed_count = n())
答案 0 :(得分:0)
我会使用PGS.rollback conn
创建一个索引列,然后使用row_number()
每3600行进行一次拆分,最后ft_bucketizer()
和group_by()
来获取计数
以下是一个例子:
tally()