Так что мне нужно вычислить разницу между двумя датами.Я знаю, что PySpark SQL поддерживает DATEDIFF
, но только на день.Я сделал функцию, которая вычисляет разницу, но у меня просто нет вывода.Код выглядит так:
...
logRowsDF.createOrReplaceTempView("taxiTable")
#first way
spark.registerFunction("test", lambda x,y: ((dt.strptime(x, '%Y-%m-%d %H:%M:%S') - dt.strptime(y, '%Y-%m-%d %H:%M:%S')).days * 24 * 60) + ((dt.strptime(x, '%Y-%m-%d %H:%M:%S') - dt.strptime(y, '%Y-%m-%d %H:%M:%S')).seconds/60))
#second
spark.registerFunction("test", lambda x,y: countTime(x,y))
#third
diff = udf(countTime)
#trying to call that function that way
listIpsDF = spark.sql('SELECT diff(pickup,dropoff) AS TIME FROM taxiTable')
Функция:
def countTime(time1, time2):
fmt = '%Y-%m-%d %H:%M:%S'
d1 = dt.strptime(time1, fmt)
d2 = dt.strptime(time2, fmt)
diff = d2 -d1
diff_minutes = (diff.days * 24 * 60) + (diff.seconds/60)
return str(diff_minutes)
Это просто не работает.Вы можете мне помочь?
Пример:
+-------------------+-------------------+
| pickup| dropoff|
+-------------------+-------------------+
|2018-01-01 00:21:05|2018-01-01 00:24:23|
|2018-01-01 00:44:55|2018-01-01 01:03:05|
| ... |
+-------------------+-------------------+
Ожидаемый результат (в минутах):
+-------------------+
| datediff |
+-------------------+
| 3.3 |
| 18.166666666666668|
| ... |
+-------------------+