Pyspark:两个日期之间的差异(Cast TimestampType、Datediff)
Pyspark: Difference between two Dates (Cast TimestampType, Datediff)
有一个 table 包含事件和特定时间戳。我努力计算使用 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))
这个答案基本上是的复制
在您的情况下,first_booking_date_clean 和 today
列的 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)
有一个 table 包含事件和特定时间戳。我努力计算使用 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))
这个答案基本上是
从 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)