将小时,分钟和秒添加到Spark数据框

时间:2018-07-02 10:10:59

标签: pyspark apache-spark-sql

是否有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"))

1 个答案:

答案 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|
+--------------------+---+

我希望这会对您有所帮助。