是否有等同于 pandas Grouper freq 功能的 Scala Spark?
Is there a Scala Spark equivalent to pandas Grouper freq feature?
在pandas中,如果我们有一个时间序列并且需要按特定频率(例如,每两周一次)对其进行分组,则可以使用Grouper
class ,像这样:
import pandas as pd
df.groupby(pd.Grouper(key='timestamp', freq='2W'))
在 Spark 中(更具体地说,使用 Scala)是否有此功能的等效项?
您可以使用sql函数window。首先,如果您还没有时间戳列,请从字符串类型 datetime 创建时间戳列:
val data =
Seq(("2022-01-01 00:00:00", 1),
("2022-01-01 00:15:00", 1),
("2022-01-08 23:30:00", 1),
("2022-01-22 23:30:00", 4))
然后,对timestamp列应用window函数,对你需要的列进行聚合,每个slot得到一个结果:
val df0 =
df.groupBy(window(col("date"), "1 week", "1 week", "0 minutes"))
.agg(sum("a") as "sum_a")
结果包括计算的windows。查看文档以更好地理解输入参数:https://spark.apache.org/docs/latest/api/sql/index.html#window.
val df1 = df0.select("window.start", "window.end", "sum_a")
df1.show()
它给出:
+-------------------+-------------------+-----+
| start| end|sum_a|
+-------------------+-------------------+-----+
|2022-01-20 01:00:00|2022-01-27 01:00:00| 4|
|2021-12-30 01:00:00|2022-01-06 01:00:00| 2|
|2022-01-06 01:00:00|2022-01-13 01:00:00| 1|
+-------------------+-------------------+-----+
在pandas中,如果我们有一个时间序列并且需要按特定频率(例如,每两周一次)对其进行分组,则可以使用Grouper
class ,像这样:
import pandas as pd
df.groupby(pd.Grouper(key='timestamp', freq='2W'))
在 Spark 中(更具体地说,使用 Scala)是否有此功能的等效项?
您可以使用sql函数window。首先,如果您还没有时间戳列,请从字符串类型 datetime 创建时间戳列:
val data =
Seq(("2022-01-01 00:00:00", 1),
("2022-01-01 00:15:00", 1),
("2022-01-08 23:30:00", 1),
("2022-01-22 23:30:00", 4))
然后,对timestamp列应用window函数,对你需要的列进行聚合,每个slot得到一个结果:
val df0 =
df.groupBy(window(col("date"), "1 week", "1 week", "0 minutes"))
.agg(sum("a") as "sum_a")
结果包括计算的windows。查看文档以更好地理解输入参数:https://spark.apache.org/docs/latest/api/sql/index.html#window.
val df1 = df0.select("window.start", "window.end", "sum_a")
df1.show()
它给出:
+-------------------+-------------------+-----+
| start| end|sum_a|
+-------------------+-------------------+-----+
|2022-01-20 01:00:00|2022-01-27 01:00:00| 4|
|2021-12-30 01:00:00|2022-01-06 01:00:00| 2|
|2022-01-06 01:00:00|2022-01-13 01:00:00| 1|
+-------------------+-------------------+-----+