Вы не можете вычесть метки времени, вам нужно привести их к секундам. Поэтому вам нужно привести столбцы метки времени к long / bigint , как есть. вычитая, divide by 60
, чтобы получить минутное значение , а затем посмотреть, является ли оно less than 30
.
#example=df1
#both columns are of type Timestamp
+-------------------+-------------------+
| prev_time|CAL_COMPLETION_TIME|
+-------------------+-------------------+
|2019-04-26 01:19:10|2019-04-26 01:19:35|
+-------------------+-------------------+
Pyspark:
df1.withColumn("sub", F.when(((F.col("CAL_COMPLETION_TIME").cast("long")-F.col("prev_time").cast("long"))/60 < 30), F.lit("LESSTHAN30")).otherwise(F.lit("GREATERTHAN"))).show()
+-------------------+-------------------+----------+
| prev_time|CAL_COMPLETION_TIME| sub|
+-------------------+-------------------+----------+
|2019-04-26 01:19:10|2019-04-26 01:19:35|LESSTHAN30|
+-------------------+-------------------+----------+
Искра. sql
df1.createOrReplaceTempView("df1")
spark.sql("select prev_time, CAL_COMPLETION_TIME, IF(((CAST(CAL_COMPLETION_TIME as bigint) - CAST(prev_time as bigint))/60)<30,'LESSTHAN30','GREATER') as difference_duration from df1").show()
+-------------------+-------------------+-------------------+
| prev_time|CAL_COMPLETION_TIME|difference_duration|
+-------------------+-------------------+-------------------+
|2019-04-26 01:19:10|2019-04-26 01:19:35| LESSTHAN30|
+-------------------+-------------------+-------------------+