Как найти разницу во времени между 2 датами-временем в Scala?
У меня есть фрейм данных
+-----+----+----------+------------+----------+------------+
|empId| lId| date1| time1 | date2 | time2 |
+-----+----+----------+------------+----------+------------+
| 1234|1212|2018-04-20|21:40:29.077|2018-04-20|22:40:29.077|
| 1235|1212|2018-04-20|22:40:29.077|2018-04-21|00:40:29.077|
+-----+----+----------+------------+----------+------------+
Нужно найти разницу во времени между 2 датами-временами (в минутах) для каждого эмпида и сохранить как новый столбец. Требуемый результат :
+-----+----+----------+------------+----------+------------+---------+
|empId| lId| date1| time1 | date2 | time2 |TimeDiff |
+-----+----+----------+------------+----------+------------+---------+
| 1234|1212|2018-04-20|21:40:29.077|2018-04-20|22:40:29.077|60 |
| 1235|1212|2018-04-20|22:40:29.077|2018-04-21|00:40:29.077|120 |
+-----+----+----------+------------+----------+------------+---------+
1 ответ:
Вы можете
concat
date
иtime
и преобразовать его вtimestamp
и найтиdifference
в минутах, как показано нижеimport org.apache.spark.sql.functions._ val format = "yyyy-MM-dd HH:mm:ss.SSS" //datetime format after concat val newDF = df1.withColumn("TimeDiffInMinute", abs(unix_timestamp(concat_ws(" ", $"date1", $"time1"), format).cast("long") - (unix_timestamp(concat_ws(" ", $"date2", $"time2"), format)).cast("long") / 60D )
unix_timestamp
чтобы преобразоватьdatetime
вtimestamp
, вычитаниеtimestamp
приводит кseconds
и деление на 60 приводит кminutes
.Вывод:
+-----+----+----------+------------+----------+------------+---------+ |empId| lId| date1| time1| date2| time2|dateTime1| +-----+----+----------+------------+----------+------------+---------+ | 1234|1212|2018-04-20|21:40:29.077|2018-04-20|22:40:29.077| 60.0| | 1235|1212|2018-04-20|22:40:29.077|2018-04-21|00:40:29.077| 120.0| +-----+----+----------+------------+----------+------------+---------+
Надеюсь, это помогло!