0

上下文:我有一个带有登录时间的大表。我想计算指定时间段内(例如 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'))

我想知道是否有现有的 sparklyr/dplyr 方法来实现这一点。 这个与将“window_frame”函数添加到 dbplyr 相关的问题看起来很有希望,但是我找不到指定“范围之间”的方法,以下操作仅生成“之间的行”窗口:

df %>%
  group_by(id) %>%
  window_frame(-3600, 0) %>%
  window_order(logon_time) %>%
  mutate(windowed_count = n())
4

1 回答 1

0

我将使用创建一个索引列row_number(),然后ft_bucketizer()在每 3600 行处使用拆分,最后group_by()tally()获取计数

这是一个例子:

split_by <- c(1, ((1:9* 10) + 1), 100)

sample_flights %>%
  head(100) %>%
  mutate(order = as.double(row_number(DayofMonth))) %>%
  ft_bucketizer("order", "bucket", splits =  split_by) %>%
  group_by(bucket) %>%
  tally()
于 2017-09-22T20:53:04.933 回答