Вы можете преобразовать Timestamp
в java.time
LocalDateTime и изменить его значение day
с помощью 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|
// +---+-------------------+-------------------+