Pyspark:两个日期之间的差异(Cast TimestampType,Datediff)

Posted

技术标签:

【中文标题】Pyspark:两个日期之间的差异(Cast TimestampType,Datediff)【英文标题】:Pyspark: Difference between two Dates (Cast TimestampType, Datediff) 【发布时间】:2017-06-29 09:24:44 【问题描述】:

有一个包含事件和特定时间戳的表格。我很难计算使用 Pyspark 2.0 API 过去的天数。当时间戳遵循另一种格式(yyyy-mm-dd)时,我设法做同样的事情

    +-------------------+------------------------+----------+--------------+
     | first_booking_date|first_booking_date_clean|  today   |customer_since|
    +-------------------+------------------------+----------+--------------+
     |02-06-2011 20:52:04|              02-06-2011|02-06-2011|          null|
     |03-06-2004 18:15:10|              03-06-2004|02-06-2011|          null|

我尝试了以下方法(没有任何效果): - 使用字符串操作提取日期并使用 datediff - 转换为时间戳,然后提取 dd:MM:yy (->result null) - 我更喜欢使用 pyspark 命令而不是使用 sql 进行任何其他转换

非常感谢您的帮助,最好的,非常感谢!!!

编辑:这是一个不起作用的示例:

import datetime
today = datetime.date(2011,2,1)
today = "02-06-2011"
first_bookings = first_bookings.withColumn("today",F.lit(today))
first_bookings = first_bookings.withColumn("first_booking_date_clean",F.substring(first_bookings.first_booking_date, 0, 10))
first_bookings = first_bookings.withColumn("customer_since",F.datediff(first_bookings.today,first_bookings.first_booking_date_clean))

【问题讨论】:

很高兴在需要时添加更多信息! ***.com/a/36985244/4219202 查看类似问题的答案。在您的情况下,对于 first_booking_date_clean 和今天的列,timeFmt 将是“dd-MM-yyyy” Calculating duration by subtracting two datetime columns in string format的可能重复 【参考方案1】:

这个答案基本上是https://***.com/a/36985244/4219202的副本 在您的情况下,first_booking_date_cleantoday

列的 timeFmt 将是“dd-MM-yyyy”

从 Spark 1.5 开始,您可以使用 unix_timestamp:

from pyspark.sql import functions as F
timeFmt = "yyyy-MM-dd'T'HH:mm:ss.SSS"
timeDiff = (F.unix_timestamp('EndDateTime', format=timeFmt)
            - F.unix_timestamp('StartDateTime', format=timeFmt))
df = df.withColumn("Duration", timeDiff)

【讨论】:

以上是关于Pyspark:两个日期之间的差异(Cast TimestampType,Datediff)的主要内容,如果未能解决你的问题,请参考以下文章

连续行之间的日期差异 - Pyspark Dataframe

基于pyspark中仅一列的两个DataFrame之间的差异[重复]

在 pyspark sql 中查找两个时间戳之间的差异

Pyspark DataFrame:查找两个 DataFrame 之间的差异(值和列名)

计算pyspark中两个日期之间的时间

在pyspark数据框中的两个日期之间生成每月时间戳