我正在尝试转换日期格式。我在一列中有如下数据:
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|
+-------------------+