【发布时间】:2018-12-16 15:04:04
【问题描述】:
我有一些具有以下结构的数据框:
ID| Page | User | Timestamp |
|1|Page 1 |Ericd |2002-09-07 19:39:55|
|1|Page 1 |Liir |2002-10-12 03:01:42|
|1|Page 1 |Tubby |2002-10-12 03:02:23|
|1|Page 1 |Mojo |2002-10-12 03:18:24|
|1|Page 1 |Kirf |2002-10-12 03:19:03|
|2|Page 2 |The Epopt |2001-11-28 22:27:37|
|2|Page 2 |Conversion script|2002-02-03 01:49:16|
|2|Page 2 |Bryan Derksen |2002-02-25 16:51:15|
|2|Page 2 |Gear |2002-10-04 12:46:06|
|2|Page 2 |Tim Starling |2002-10-06 08:13:42|
|2|Page 2 |Tim Starling |2002-10-07 03:00:54|
|2|Page 2 |Salsa Shark |2003-03-18 01:45:32|
我想找出在一段时间内(例如每个月)访问过这些页面的用户数量。例如,对于 2002 年的第 10 个月,结果将是
|1|Page 1 |Liir |2002-10-12 03:01:42|
|1|Page 1 |Tubby |2002-10-12 03:02:23|
|1|Page 1 |Mojo |2002-10-12 03:18:24|
|1|Page 1 |Kirf |2002-10-12 03:19:03|
|2|Page 2 |Gear |2002-10-04 12:46:06|
|2|Page 2 |Tim Starling |2002-10-06 08:13:42|
|2|Page 2 |Tim Starling |2002-10-07 03:00:54|
以及页数:
numberOfUsers (in October 2002)
|1|Page 1 | 4
|2|Page 2 | 3
问题还在于如何将这个逻辑应用于每年的每个月。例如,我想出了如何查找过去 n 天发生的事件
days = lambda i: i * 86400
window = (Window().partitionBy(col("page"))
.orderBy(col("timestamp").cast("timestamp").cast("long")).rangeBetween(-days(30), 0))
df = df.withColumn("monthly_occurrences", func.count("user").over(window))
df.show()
一些建议我将不胜感激
【问题讨论】:
-
您好 metron,您的问题解决了吗?如果是这样,请考虑 accepting 将您的问题标记为已解决的答案之一。
标签: python apache-spark pyspark apache-spark-sql