将日期转换为Scala Spark的另一种格式

将日期转换为Scala Spark的另一种格式,scala,date,apache-spark,apache-spark-sql,to-date,Scala,Date,Apache Spark,Apache Spark Sql,To Date,我正在阅读包含两种日期的CSV: dd-MMM-yyyy hh:mm:ss->2019年12月13日17:10:00 年月日hh:MM->11/02/2020 17:33 我正在尝试将第一种类型的所有日期转换为第二种类型,但我找不到好的解决方案。我正在尝试这个: val pr_date = readeve.withColumn("Date", when(to_date(col("Date"),"dd-MMM-yyyy hh:mm:ss&quo

我正在阅读包含两种日期的CSV:

  • dd-MMM-yyyy hh:mm:ss->2019年12月13日17:10:00
  • 年月日hh:MM->11/02/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)
我将整个日期列作为空值:

我正在尝试此功能:

 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

是否尝试下面的代码?请注意,
17
HH
,而不是
HH
。也可以尝试
到时间戳
而不是
到日期
,因为您希望保留时间

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")
    )
)