2017-09-19 5 views
0

コンテキスト:ログオン時に大きなテーブルがあります。私は指定された期間(例えば3600秒)内のログオンのローリングカウントを計算したいと思います。 SQL/HQLでsparklyrでのウィンドウ操作にspark-sqlの "range between"句を使用する方法

私はこれを指定します:私があるのか​​どうかを知りたい

df %>% 
    mutate(window_count = sql('COUNT(*) OVER(
     PARTITION BY id ORDER BY logon_time 
     RANGE BETWEEN 3600 PRECEDING AND CURRENT ROW')) 

:sparklyrでの回避策として

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 

として、我々はこれを書くことができますこれを達成するための既存のスパークリヤ/デュプリル方法。 dbplyrに「window_frame」機能を追加することに関連することは有望に見える This issue、しかし、私は「との間の範囲」を指定する方法を見つけることができない、以下の操作は、ウィンドウのみ「の間の行」を生成:

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

答えて

0

私は

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() 
row_number()を使用してインデックス列を作成し、その後、すべての3600行に分割して ft_bucketizer()を使用し、最後に group_by()tally()数ここ

を取得する例です

関連する問題