我有一個與如何在 Spark SQL 中按時間間隔分組非常相似的問題
但是,我的指標是花費的時間 ( duration),所以我的資料看起來像
KEY |Event_Type | duration | Time
001 |event1 | 10 | 2016-05-01 10:49:51
002 |event2 | 100 | 2016-05-01 10:50:53
001 |event3 | 20 | 2016-05-01 10:50:55
001 |event1 | 15 | 2016-05-01 10:51:50
003 |event1 | 13 | 2016-05-01 10:55:30
001 |event2 | 12 | 2016-05-01 10:57:00
001 |event3 | 11 | 2016-05-01 11:00:01
有沒有辦法將花費的時間匯總到按鍵分組的五分鐘桶中,并知道持續時間何時超出桶的界限?
例如,第一行從 10:49:51 開始,在 10:50:01 結束,因此,視窗中鍵 001 的存盤桶[2016-05-01 10:45:00.0,2016-05-01 10:50:00.0]將獲得 8 秒的持續時間(51 秒到 60 秒),并且 10:50到 10:55 將獲得 2 秒的持續時間,加上其他日志行的相關秒數(第三行的 20 秒,第四行的 15 秒)。
我想對特定桶中的時間求和,但另一個執行緒上的解決方案
df.groupBy($"KEY", window($"time", "5 minutes")).sum("metric")
會在桶中多計時間戳,重疊桶開始,并低估后續桶
注意:我的Time專欄也在 Epoch 時間戳中,例如1636503077,但如果這樣可以更輕松地進行計算,我可以輕松地將其轉換為上述格式。
uj5u.com熱心網友回復:
在我看來,也許您需要通過將持續時間延長到每分鐘(或每五分鐘)來預處理您的資料。
如您所愿,第一行
001 |event1 | 10 | 2016-05-01 10:49:51
應該轉換為
001 |event1 | 9 | 2016-05-01 10:49:51
001 |event1 | 1 | 2016-05-01 10:50:00
那么你可以使用火花視窗函式來正確地總結它。
df.groupBy($"KEY", window($"time", "5 minutes")).sum("metric")
如果您只想知道時間段的持續時間,這不會改變結果,但會增加記錄數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358574.html
