RaA*_*aAm 0 scala apache-spark spark-dataframe
我有时间戳输入,基于某些条件,我需要使用 Scala 编程减去 1 秒或减去 3 个月
输入:
val date :String = "2017-10-31T23:59:59.000"
Run Code Online (Sandbox Code Playgroud)
输出:
减 1 秒
val lessOneSec = "2017-10-31T23:59:58.000"
Run Code Online (Sandbox Code Playgroud)
减 3 个月
val less3Mon = "2017-07-31T23:59:58.000"
Run Code Online (Sandbox Code Playgroud)
如何将字符串值转换为时间戳并执行 Scala 编程中的减号等操作?
我假设您正在使用 Dataframes,因为您有 spark-dataframe 标签。
您可以使用 SQL INTERVAL 来减少时间,但您的列应该采用以下timestamp格式:
df.show(false)
+-----------------------+
|ts |
+-----------------------+
|2017-10-31T23:59:59.000|
+-----------------------+
import org.apache.spark.sql.functions._
df.withColumn("minus1Sec" , date_format($"ts".cast("timestamp") - expr("interval 1 second") , "yyyy-MM-dd'T'HH:mm:ss.SSS") )
.withColumn("minus3Mon" , date_format($"ts".cast("timestamp") - expr("interval 3 month ") , "yyyy-MM-dd'T'HH:mm:ss.SSS") )
.show(false)
+-----------------------+-----------------------+-----------------------+
|ts |minus1Sec |minus3Mon |
+-----------------------+-----------------------+-----------------------+
|2017-10-31T23:59:59.000|2017-10-31T23:59:58.000|2017-07-31T23:59:59.000|
+-----------------------+-----------------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)