scala - 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 版本时为空:
+-------------+
|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|
+-------------------+