pyspark中多个时间戳之间的差异

时间:2019-05-20 13:59:17

标签: dataframe pyspark timestamp

我有带有用户登录名的数据框。他们在一小时内多次登录。 对于每个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]),
  1. 在login_timestamps中(最好从最后)获取这些记录 到1,即在此示例中1操作将是 是1525859885-(减去)以前的值或1525859767,这使我们得到118 毫秒,这样一来就开始了,所以我们将得到一个列表 时间戳之间的差异,然后我们可以计算平均值。但 如何在火花中做到这一点?
  2. 然后是第二个问题: ,则应将其保存在其他列中,即我必须创建 当天每天每小时有24个不同的列,并向它们添加与给定小时的差异

要做到这一点,我做到了:

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.

0 个答案:

没有答案