假设我有一个包含三列的表:dt
、id
和value
。
df_tmp = spark.createDataFrame([('2023-01-01', 1001, 5),
('2023-01-15', 1001, 3),
('2023-02-10', 1001, 1),
('2023-02-20', 1001, 2),
('2023-01-02', 1002, 7),
('2023-01-02', 1002, 6),
('2023-01-03', 1002, 1)],
["date", "id", "value"])
df.show()
# +----------+----+-----+
# | date| id|value|
# +----------+----+-----+
# |2023-01-01|1001| 5|
# |2023-01-15|1001| 3|
# |2023-02-10|1001| 1|
# |2023-02-20|1001| 2|
# |2023-01-02|1002| 7|
# |2023-01-02|1002| 6|
# |2023-01-03|1002| 1|
# +----------+----+-----+
字符串
我想计算value
的30天滚动总和,id
分组为每个date
,此外,id
被 * 看到 * 的一些不同日期。看起来像这样的东西:
+----------+----+-----+----------------+-------------------------+
| date| id|value|30_day_value_sum|days_seen_in_past_30_days|
+----------+----+-----+----------------+-------------------------+
|2023-01-01|1001| 5| 0| 0|
|2023-01-15|1001| 3| 0| 1|
|2023-02-10|1001| 1| 3| 1|
|2023-02-20|1001| 2| 1| 2|
|2023-01-02|1002| 7| 0| 0|
|2023-01-02|1002| 6| 7| 1|
|2023-01-03|1002| 1| 13| 2|
+----------+----+-----+----------------+-------------------------+
型
我怀疑可以使用Window
来实现,但不清楚具体细节。
1条答案
按热度按时间bxjv4tth1#
我假设你的dataframe中最初有 date 数据类型,所以我使用了比你的输入稍微修改的输入:
字符串
在这种情况下,以下窗口应该工作:
型
如果你在“date”列中有 string 类型,那么你应该使用下面的.orderBy`子句:
型
更多选项和细节在这里。