为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 pyspark 中以秒为单位获取 datediff()?

如何在 pyspark 中以秒为单位获取 datediff()?

慕田峪4524236 2021-11-30 19:19:14
我已经尝试过 ( this_post ) 中的代码,但无法获得以秒为单位的日期差异。我只是在下面的 'Attributes_Timestamp_fix' 和 'lagged_date' 列之间使用 datediff()。任何提示?在我的代码和输出下方。eg = eg.withColumn("lagged_date", lag(eg.Attributes_Timestamp_fix, 1).over(Window.partitionBy("id").orderBy("Attributes_Timestamp_fix")))eg = eg.withColumn("time_diff", datediff(eg.Attributes_Timestamp_fix, eg.lagged_date))        id      Attributes_Timestamp_fix time_diff0   3.531611e+14    2018-04-01 00:01:02 NaN1   3.531611e+14    2018-04-01 00:01:02 0.02   3.531611e+14    2018-04-01 00:03:13 0.03   3.531611e+14    2018-04-01 00:03:13 0.04   3.531611e+14    2018-04-01 00:03:13 0.05   3.531611e+14    2018-04-01 00:03:13 0.0
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

在 中pyspark.sql.functions,datediff不幸的是,有一个函数只能计算天数差异。为了克服这个问题,您可以将两个日期转换为 unix 时间戳(以秒为单位)并计算差异。


让我们创建一些示例数据,计算滞后,然后计算差异(以秒为单位)。


from pyspark.sql.functions import col, lag, unix_timestamp

from pyspark.sql.window import Window

import datetime


d = [{'id' : 1, 't' : datetime.datetime(2018,01,01)},\

 {'id' : 1, 't' : datetime.datetime(2018,01,02)},\

 {'id' : 1, 't' : datetime.datetime(2018,01,04)},\

 {'id' : 1, 't' : datetime.datetime(2018,01,07)}]


df = spark.createDataFrame(d)

df.show()

+---+-------------------+

| id|                  t|

+---+-------------------+

|  1|2018-01-01 00:00:00|

|  1|2018-01-02 00:00:00|

|  1|2018-01-04 00:00:00|

|  1|2018-01-07 00:00:00|

+---+-------------------+


w = Window.partitionBy('id').orderBy('t')

df.withColumn("previous_t", lag(df.t, 1).over(w))\

  .select(df.t, (unix_timestamp(df.t) - unix_timestamp(col('previous_t'))).alias('diff'))\

  .show()


+-------------------+------+

|                  t|  diff|

+-------------------+------+

|2018-01-01 00:00:00|  null|

|2018-01-02 00:00:00| 86400|

|2018-01-04 00:00:00|172800|

|2018-01-07 00:00:00|259200|

+-------------------+------+


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信