spark数据帧将字符串列转换为具有给定格式的时间戳

时间:2018-10-26 09:17:37

标签: apache-spark dataframe timestamp

我执行时

sparkSession.sql("SELECT to_timestamp('2018-08-04.11:18:29 AM', 'yyyy-MM-dd.hh:mm:ss a') as timestamp")
答案中缺少

am / pm

+-------------------+
|          timestamp|
+-------------------+
|2018-08-04 11:18:29|
+-------------------+

但是如果不存在AM / PM,那么它将给出正确的答案。

使用unix_timestamp

sparkSession.sql("select from_unixtime(unix_timestamp('08-04-2018.11:18:29 AM','dd-MM-yyyy.HH:mm:ss a'), 'dd-MM-yyyy.HH:mm:ss a') as timestamp")

给出正确答案,但数据类型变为字符串,而我的要求是将数据类型转换为时间戳,而不会丢失数据。

有人建议吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

时间戳数据类型中没有缺少AM / PM。它只是以24小时格式显示时间。您不会丢失任何信息。

例如,

scala> spark.sql("SELECT to_timestamp('2018-08-04.11:18:29 PM', 'yyyy-MM-dd.hh:mm:ss a') as timestamp").show(false)
+-------------------+
|timestamp          |
+-------------------+
|2018-08-04 23:18:29|
+-------------------+

每当要用AM / PM表示时间戳时,只需使用日期/时间格式化程序功能

答案 1 :(得分:0)

打印表示的格式是固定的(本地时区符合ISO 8601的字符串),并且不能修改。

这里没有任何可以帮助您的转换,因为任何满足输出格式的转换都必须将数据转换为字符串。