是否有Spark SQL函数将小时,分钟和秒添加到现有的时间戳列中。
例如:
+----------+-------------------+-------------------+
| dt| txn_dt| txn_dt_tm|
+----------+-------------------+-------------------+
|2008-08-15|2008-08-15 00:00:00|2008-08-15 05:00:00|
+----------+-------------------+-------------------+
我需要在txn_dt
列中添加23小时59分59秒。
输出:
+----------+-------------------+-------------------+
| dt| txn_dt| txn_dt_tm|
+----------+-------------------+-------------------+
|2008-08-15|2008-08-15 23:59:59|2008-08-15 05:00:00|
+----------+-------------------+-------------------+
更新:
我可以使用INTERVAL来获取它,但不确定这样做是否有效。
df.select((F.col("txn_dt") + F.expr("INTERVAL 23 HOURS") + F.expr("INTERVAL 59 MINUTES") + F.expr("INTERVAL 59 SECONDS")).alias("txn_dt_tm"))
答案 0 :(得分:4)
您需要自定义udf函数,例如:
import org.apache.spark.sql.functions._
val timeUdf = udf{(time: java.sql.Timestamp) => new java.sql.Timestamp(time.getTime + 24*60*60*1000 - 1000)}
df.withColumn("dt", timeUdf(df("dt"))).show()
和结果:
+--------------------+---+
| dt| id|
+--------------------+---+
|2008-08-15 23:59:...| 1|
+--------------------+---+
我希望这会对您有所帮助。