spark date_format在版本2.4中显示null



我正在尝试转换日期格式。我在一列中有如下数据:

04-JUN-21 09.07.55.061067 PM

我正在尝试将其转换为以下格式:

2021-06-04 21:07:55

我正在尝试以下代码来做到这一点:

val df = Seq("04-JUN-21 09.07.55.061067 PM", "05-JUN-21 09.07.55.061067 PM").toDF("UPLOADED_DATE")
df.select(date_format(to_timestamp($"UPLOADED_DATE","dd-MMM-yy hh.mm.ss.SSSSSS a"),"yyyy-MM-dd HH:mm:ss") as "UPLOADED_DATE").show
df.registerTempTable("tbl")
spark.sql("select date_format(to_timestamp(UPLOADED_DATE,'dd-MMM-yy hh.mm.ss.SSSSSS a'),'yyyy-MM-dd HH:mm:ss') as UPLOADED_DATE from tbl").show()

我在使用spark 3.0.2版本时得到了结果:

+-------------------+
|      UPLOADED_DATE|
+-------------------+
|2021-06-04 21:07:55|
|2021-06-05 21:07:55|
+-------------------+

但是在使用spark 2.4.7版本时得到null:

+-------------+
|UPLOADED_DATE|
+-------------+
|         null|
|         null|
+-------------+

请让我知道在spark 2.4版本中是否有不同的方法。

这里有一个解决方法。时间戳的毫秒部分似乎引起了问题,所以如果你无论如何都要丢弃它,你可以在调用to_timestamp:之前删除它

df.select(
date_format(
to_timestamp(
regexp_replace($"UPLOADED_DATE", "\.\d{6}", ""),
"dd-MMM-yy hh.mm.ss a"
),
"yyyy-MM-dd HH:mm:ss"
) as "UPLOADED_DATE"
).show
+-------------------+
|      UPLOADED_DATE|
+-------------------+
|2021-06-04 21:07:55|
|2021-06-05 21:07:55|
+-------------------+

最新更新