我有一个数据框,它看起来像这样:
+-------------+---------+-------+
|Timestamp |Usercount|IsoWeek|
+-------------+---------+-------+
|2019-07-21 00|21 |29 |
|2019-07-21 01|22 |29 |
|2019-07-21 02|23 |29 |
|2019-07-21 03|24 |29 |
|2019-07-21 04|25 |29 |
|2019-07-21 05|26 |29 |
|2019-07-21 06|27 |29 |
|2019-07-21 07|28 |29 |
|2019-07-21 08|29 |29 |
|2019-07-21 09|30 |29 |
|2019-07-21 10|31 |29 |
|2019-07-21 11|32 |29 |
|2019-07-21 12|33 |29 |
|2019-07-21 13|34 |29 |
|2019-07-21 14|35 |29 |
|2019-07-21 15|36 |29 |
|2019-07-21 16|37 |29 |
|2019-07-21 17|38 |29 |
|2019-07-21 18|39 |29 |
|2019-07-21 19|40 |29 |
|2019-07-21 20|41 |29 |
|2019-07-21 21|42 |29 |
|2019-07-21 22|43 |29 |
|2019-07-21 23|44 |29 |
|2019-07-22 00|22 |30 |
|2019-07-22 01|23 |30 |
|2019-07-22 02|24 |30 |
|2019-07-22 03|25 |30 |
|2019-07-22 04|26 |30 |
|2019-07-22 05|27 |30 |
|2019-07-22 06|28 |30 |
|2019-07-22 07|29 |30 |
|2019-07-22 08|30 |30 |
|2019-07-22 09|31 |30 |
|2019-07-22 10|32 |30 |
|2019-07-22 11|33 |30 |
|2019-07-22 12|34 |30 |
|2019-07-22 13|35 |30 |
|2019-07-22 14|36 |30 |
|2019-07-22 15|37 |30 |
|2019-07-22 16|38 |30 |
|2019-07-22 17|39 |30 |
|2019-07-22 18|40 |30 |
|2019-07-22 19|41 |30 |
|2019-07-22 20|42 |30 |
|2019-07-22 21|43 |30 |
|2019-07-22 22|44 |30 |
|2019-07-22 23|45 |30 |
|2019-07-23 00|23 |30 |
|2019-07-23 01|24 |30 |
|2019-07-23 02|25 |30 |
|2019-07-23 03|26 |30 |
|2019-07-23 04|27 |30 |
|2019-07-23 05|28 |30 |
|2019-07-23 06|29 |30 |
|2019-07-23 07|30 |30 |
|2019-07-23 08|31 |30 |
|2019-07-23 09|32 |30 |
|2019-07-23 10|33 |30 |
|2019-07-23 11|34 |30 |
|2019-07-23 12|35 |30 |
|2019-07-23 13|36 |30 |
|2019-07-23 14|37 |30 |
|2019-07-23 15|38 |30 |
|2019-07-23 16|39 |30 |
|2019-07-23 17|40 |30 |
|2019-07-23 18|41 |30 |
|2019-07-23 19|42 |30 |
|2019-07-23 20|43 |30 |
|2019-07-23 21|44 |30 |
|2019-07-23 22|45 |30 |
|2019-07-23 23|46 |30 |
+-------------+---------+-------+
我正在使用 4小时的窗口对数据进行分组:
val numUSersDF = df
.groupBy(
window(col("Timestamp"), "4 hours", "2 hours")
)
.agg(
countDistinct("Usercount").alias("NumUsers")
)
因为它是一个4小时的窗口,所以当时间戳记在 23 小时结束时,从第二天起需要2个小时才能正确进行计算。
如果数据是连续的,那不是问题,但是如果数据也按 IsoWeek 进行分组,则将造成问题,因为第二天的第二个小时不包含在分组集中中。
如何做到这一点,以便第二天2小时成为两个星期的一部分,所以不会中断执行。
类似于以下内容:
+-------------+---------+-------+
|Timestamp |Usercount|IsoWeek|
+-------------+---------+-------+
|2019-07-21 20|41 |29 |
|2019-07-21 21|42 |29 |
|2019-07-21 22|43 |29 |
|2019-07-21 23|44 |29 |
|2019-07-22 00|22 |29 | <------
|2019-07-22 01|23 |29 | <------
|2019-07-22 00|22 |30 |
|2019-07-22 01|23 |30 |
|2019-07-22 02|24 |30 |
|2019-07-22 03|25 |30 |
所以我可以轻松地按 IsoWeek 分组,第二天2小时就是其中的一部分。
任何帮助将不胜感激。