Дата изменения Spark (scala) в столбце datetime - PullRequest
0 голосов
/ 08 апреля 2019

день изменения pyspark в столбце datetime

Я пытаюсь сделать что-то похожее на ответ выше.Я получаю value replace is not a member of 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 объекта.Когда я гуглю это, кажется, что ответы не относятся к одному типу.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Вы можете преобразовать 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|
// +---+-------------------+-------------------+
0 голосов
/ 08 апреля 2019

так что это, вероятно, не лучший способ сделать это, но вот один из способов

val DateTimeString = date.toString()
val DTtime = DateTimeString.split(" ")(1)
DTday + " " + DTtime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...