datetime列中的Spark(scala)更改日期
我正在尝试做与上面答案类似的事情。我要走了datetime列中的Spark(scala)更改日期,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在尝试做与上面答案类似的事情。我要走了 value replace不是java.sql.Timestamp的成员 val changeDay = udf((date:java.sql.Timestamp) => { val day = 1 date.replace(day=day) }) val df2 = df1.withColumn("newDateTime", changeDay($"datetime")) 我不知道这个java.sql.Timestamp对象可以使用哪
value replace不是java.sql.Timestamp的成员
val changeDay = udf((date:java.sql.Timestamp) => {
val day = 1
date.replace(day=day)
})
val df2 = df1.withColumn("newDateTime", changeDay($"datetime"))
我不知道这个java.sql.Timestamp
对象可以使用哪些函数。当我在谷歌上搜索时,看起来答案似乎与同一类型无关 所以这可能不是最好的方法,但这里有一种方法
val DateTimeString = date.toString()
val DTtime = DateTimeString.split(" ")(1)
DTday + " " + DTtime
您可以将时间戳
转换为java.time
,并通过withDayOfMonth(day)
更改其日
值,如下所示:
import java.sql.Timestamp
import org.apache.spark.sql.functions._
import spark.implicits._
val df = Seq(
(1, Timestamp.valueOf("2019-03-07 12:30:00")),
(2, Timestamp.valueOf("2019-04-08 09:00:00"))
).toDF("id", "ts")
def changeDay(day: Int) = udf{ (ts: Timestamp) =>
import java.time.LocalDateTime
val changedTS = ts.toLocalDateTime.withDayOfMonth(day)
Timestamp.valueOf(changedTS)
}
df.withColumn("newTS", changeDay(1)($"ts")).show
// +---+-------------------+-------------------+
// | id| ts| newTS|
// +---+-------------------+-------------------+
// | 1|2019-03-07 12:30:00|2019-03-01 12:30:00|
// | 2|2019-04-08 09:00:00|2019-04-01 09:00:00|
// +---+-------------------+-------------------+