我有带有用户登录名的数据框。他们在一小时内多次登录。 对于每个1小时的窗口,我希望获得每次登录的增量之间的平均值
[Row(Day='2018-05-09', User='9999', login_hour='2018-05-09 09', login_timestamps=[1525859759, 1525859759, 1525859761, 1525859767, 1525859767, 1525859885]),
Row(Day='2018-05-08', User='9999', login_hour='2018-05-08 12', login_timestamps=[1525783439, 1525783439, 1525783439, 1525783439, 1525783452, 1525783452, 1525783453, 1525783453, 1525783458, 1525783506, 1525783506, 1525783508, 1525783508, 1525783510, 1525783510, 1525783512, 1525783512, 1525783513, 1525783513, 1525783514, 1525783514, 1525783515, 1525783515, 1525783516, 1525783516, 1525783844, 1525783844, 1525783845]),
要做到这一点,我做到了:
login_list = df.withColumn('login_hour', F.date_format('Date','yyyy-MM-dd HH'))\
.groupBy('Day', 'User', 'login_hour')\
.agg(F.sort_array(F.collect_list('ActivityDay')).alias('login_timestamps'))
输出应类似于:
Row(Day='2018-05-09', User='9999', login_hour='2018-05-09 09', login_timestamps=[1525859759, 1525859759, 1525859761, 1525859767, 1525859767, 1525859885]), login_at_0=[200, 245], login_at_1=[60], [...], login_at_9=[118, 6], etc.