Преобразование даты в другой формат Scala Spark

Я читаю CSV-файл, содержащий даты двух типов:

  • дд-МММ-гггг чч: мм: сс - ›13-дек-2019 17:10:00
  • дд / ММ / гггг чч: мм - ›02.11.2020 17:33

Я пытаюсь преобразовать все даты первого типа во второй тип, но не могу найти хорошего решения. Я пробую это:

val pr_date = readeve.withColumn("Date", when(to_date(col("Date"),"dd-MMM-yyyy hh:mm:ss").isNotNull,
      to_date(col("Date"),"dd/MM/yyyy hh:mm")))
pr_date.show(25)

И я получаю весь столбец Date как нулевые значения:

нулевые значения

Я пытаюсь использовать эту функцию:

 def to_date_(col: Column,
            formats: Seq[String] = Seq("dd-MMM-yyyy hh:mm:ss", "dd/MM/yyyy hh:mm")) = {
    coalesce(formats.map(f => to_date(col, f)): _*)
 }
 
 val p2 = readeve.withColumn("Date",to_date_(readeve.col(("Date")))).show(125)

И в первом типе даты я тоже получаю нули:

введите описание изображения здесь

Что я делаю неправильно? (новинка в Scala Spark)

Версия Scala: 2.11.7 Версия Spark: 2.4.3


person MLstudent    schedule 14.12.2020    source источник


Ответы (1)


Попробовать код ниже? Обратите внимание, что 17 это HH, а не hh. Также попробуйте to_timestamp вместо to_date, потому что вы хотите сохранить время.

val pr_date = readeve.withColumn(
    "Date",
    coalesce(
        date_format(to_timestamp(col("Date"),"dd-MMM-yyyy HH:mm:ss"),"dd/MM/yyyy HH:mm"),
        date_format(to_timestamp(col("Date"),"dd/MM/yyyy HH:mm"),"dd/MM/yyyy HH:mm")
    )
)
person mck    schedule 14.12.2020