【发布时间】:2021-08-04 22:30:10
【问题描述】:
我想统计过去 7 天每天的不同用户数。
我有以下代码行:
days = lambda i: i * 86400
df1 = sc.parallelize(
[
['2021-05-01','aaa'],
['2021-05-08','aaa'],
['2021-05-15','aaa'],
['2021-05-15','bbb'],
['2021-06-01','aaa'],
['2021-06-10','bbb'],
['2021-06-25','aaa'],
['2021-06-30','aaa'],
['2021-07-01','bbb'],
['2021-07-10','aaa'],
['2021-07-14','bbb'],
['2021-07-15','bbb'],
['2021-07-25','bbb'],
['2021-07-30','bbb'],
]).toDF(("date", "userId"))
df1.printSchema()
df1 = df1.withColumn("date", f.to_date("date", "yyyy-MM-dd"))
df1 = (df1
.select('date', 'userId')
.withColumn('7_days_active_users', f.approx_count_distinct('userId').over(Window.orderBy(f.col('date').cast('long')).rangeBetween(-days(7), 0)))
)
df1.show()
这是输出:
+----------+------+-------------------+
| date|userId|7_days_active_users|
+----------+------+-------------------+
|2021-05-01| aaa| 2|
|2021-05-08| aaa| 2|
|2021-05-15| aaa| 2|
|2021-05-15| bbb| 2|
|2021-06-01| aaa| 2|
|2021-06-10| bbb| 2|
|2021-06-25| aaa| 2|
|2021-06-30| aaa| 2|
|2021-07-01| bbb| 2|
|2021-07-10| aaa| 2|
|2021-07-14| bbb| 2|
|2021-07-15| bbb| 2|
|2021-07-25| bbb| 2|
|2021-07-30| bbb| 2|
对于2021-05-08,他们应该只有一个不同的用户。
这里有什么问题?
【问题讨论】:
-
您是否反对遍历每一行然后为活动用户列附加一个列表?
-
我不反对任何事情;p。另外我想了解为什么我的查询不起作用。
标签: python dataframe apache-spark pyspark window-functions