繁体   English   中英

日期时间的 Spark SQL function 适用于 AM 中的时间格式,而不适用于 PM

[英]Spark SQL function for datetime is working for time format in AM not in PM

我将 AM/PM 中的 DateTime 转换为 24 小时。 AM 的转换工作正常,但 PM 的转换失败并返回null 请在示例下方找到

val seq = Seq((1,"abc","123","15/3/2021 02:00:00 AM"),(2,"pqr","456","15/3/2021 04:00:00 PM"),(1,"xyz","789","15/3/2021 09:00:00 AM"))

val df = seq.toDF("id","name","addr","time")

val time = df.withColumn("time2",from_unixtime(unix_timestamp($"time","dd/MM/yyyy HH:mm:ss a"),"d MMMMM yyyy HH:mm:ss"))

+---+----+----+---------------------+----------------------+
|id |name|addr|time                 |time2                 |
+---+----+----+---------------------+----------------------+
|1  |abc |123 |15/3/2021 02:00:00 AM|15 March 2021 02:00:00|
|2  |pqr |456 |15/3/2021 04:00:00 PM|null                  |
|1  |xyz |789 |15/3/2021 09:00:00 AM|15 March 2021 09:00:00|
+---+----+----+---------------------+----------------------+

有人可以在这里建议吗?

使用小写h表示clock-hour-of-am-pm (1-12) (请参阅文档)。 另外,使用 1 M因为给定的格式只有 1 个月份的数字; 对于结果中的长月份形式,请使用 4 M而不是 5。

val time = df.withColumn(
    "time2",
    from_unixtime(unix_timestamp($"time","dd/M/yyyy hh:mm:ss a"),"d MMMM yyyy HH:mm:ss")
)

time.show(false)
+---+----+----+---------------------+----------------------+
|id |name|addr|time                 |time2                 |
+---+----+----+---------------------+----------------------+
|1  |abc |123 |15/3/2021 02:00:00 AM|15 March 2021 02:00:00|
|2  |pqr |456 |15/3/2021 04:00:00 PM|15 March 2021 16:00:00|
|1  |xyz |789 |15/3/2021 09:00:00 AM|15 March 2021 09:00:00|
+---+----+----+---------------------+----------------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM