gpt4 book ai didi

scala - 在 Spark 中使用 Windows 函数进行每周聚合

转载 作者:行者123 更新时间:2023-12-04 16:30:33 26 4
gpt4 key购买 nike

我有从 2017 年 1 月 1 日到 2017 年 1 月 7 日的数据,这是一周的每周汇总。我按以下方式使用窗口函数

val df_v_3 = df_v_2.groupBy(window(col("DateTime"), "7 day"))
.agg(sum("Value") as "aggregate_sum")
.select("window.start", "window.end", "aggregate_sum")

我在数据框中有数据作为

    DateTime,value
2017-01-01T00:00:00.000+05:30,1.2
2017-01-01T00:15:00.000+05:30,1.30
--
2017-01-07T23:30:00.000+05:30,1.43
2017-01-07T23:45:00.000+05:30,1.4

我得到的输出是:

2016-12-29T05:30:00.000+05:30,2017-01-05T05:30:00.000+05:30,723.87
2017-01-05T05:30:00.000+05:30,2017-01-12T05:30:00.000+05:30,616.74

它显示我的一天是从2016年12月29日开始的,但实际数据是从2017年1月1日开始的,为什么会出现这个差值?

最佳答案

对于像这样的滚动窗口,可以设置开始时间的偏移量,更多信息可以在博客中找到 here .使用滑动窗口,但是,通过将“窗口持续时间”和“滑动持续时间”设置为相同的值,它将与具有起始偏移量的滚动窗口相同。

语法如下,

window(column, window duration, sliding duration, starting offset)

根据您的值,我发现 64 小时的偏移量将给出 2017-01-01 00:00:00 的开始时间。

val data = Seq(("2017-01-01 00:00:00",1.0),
("2017-01-01 00:15:00",2.0),
("2017-01-08 23:30:00",1.43))
val df = data.toDF("DateTime","value")
.withColumn("DateTime", to_timestamp($"DateTime", "yyyy-MM-dd HH:mm:ss"))

val df2 = df
.groupBy(window(col("DateTime"), "1 week", "1 week", "64 hours"))
.agg(sum("value") as "aggregate_sum")
.select("window.start", "window.end", "aggregate_sum")

将给出这个结果数据框:

+-------------------+-------------------+-------------+
| start| end|aggregate_sum|
+-------------------+-------------------+-------------+
|2017-01-01 00:00:00|2017-01-08 00:00:00| 3.0|
|2017-01-08 00:00:00|2017-01-15 00:00:00| 1.43|
+-------------------+-------------------+-------------+

关于scala - 在 Spark 中使用 Windows 函数进行每周聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46602116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com