汇总各组从最近活动时间起24小时的回顾

时间:2019-04-11 17:13:37

标签: scala apache-spark apache-spark-sql window

我想在groupBy上运行UDAF,该操作将由每个键的所有值组成,可以回顾24小时从键的最新事件时间开始。这24小时的参数是可配置的。 / p>

注意:我无法运行Spark Window分析函数,因为它在每一行的框架上运行,这会导致严重的性能问题。这不是移动窗口的问题!!!

我尝试使用Spark Window(与Spark Window Analytic不同),代码如下所示。对于窗口时间段,它稍微有点错误(请参阅输出)

val windowDF = customerDF.groupBy(col("key"), 
                               window($"session_end_tm", 
                               "24 hours"))
                          .count

这是我的示例代码。

val customer = Seq(
      ("101", 120000.00, 0.00, "2018-01-23 01:23:16"),
      ("101", 410500.00, 500.00, "2018-01-23 01:26:2"),
      ("101", 200.00, 200.00, "2018-01-23 13:07:31"),
      ("101", 410500.00, 0.0, "2018-01-23 18:38:21"),
      ("101", 500.00, 0.0, "2018-01-23 19:32:59")
    )

val customerDF = customer.toDF("key", "val_1", "val_2", "session_end_tm")

val windowDF = customerDF.groupBy(col("key"), window($"session_end_tm", "24 hours")).count

实际输出
上面代码中的结果数据框

windowDF.show(false)
+---+------------------------------------------+-----+
|key|window                                    |count|
+---+------------------------------------------+-----+
|101|[2018-01-23 19:00:00, 2018-01-24 19:00:00]|1    |
|101|[2018-01-22 19:00:00, 2018-01-23 19:00:00]|4    |
+---+------------------------------------------+-----+

预期输出
我对上面的代码有什么期望

+---+------------------------------------------+-----+
|key|window                                    |count|
+---+------------------------------------------+-----+
|101|[2018-01-22 20:00:00, 2018-01-23 20:00:00]|5    |
+---+------------------------------------------+-----+

注意:如开头所述,实际结果将是在UDAF上运行的多个聚合列,而不是简单的“ count”列。

0 个答案:

没有答案