我有时间列,它具有对象数据类型,并包含以下格式的值:
0 days 01:30:00.0
我想将上述时间列更改为HH:mm:ss的格式,以使其看起来像以下格式:
01:30:00
我使用以下代码将其转换为所需的格式:
df.withColumn('TIME_timestamp',F.to_timestamp("time", "HH:mm:ss")).show()
但是,它返回空列。上面的代码产生的输出是:
time| TIME_timestamp|
+-------------------+--------------+
0 days 00:00:00.0 | null|
0 days 00:30:00.0 | null|
0 days 01:00:00.0 | null|
0 days 01:30:00.0 | null|
0 days 02:00:00.0 | null|
0 days 02:30:00.0 | null|
+-------------------+---------------+
谁能指导我在哪里犯错?
问题来源:stackoverflow
您可以使用子字符串将时间值获取到to_timestamp函数中。时间戳将提供其默认日期,因为时间戳需要日期。
df.withColumn("Time_timestamp", F.to_timestamp(F.substring("time",7,9),"HH:mm:ss")).show()
+-----------------+-------------------+
| time| Time_timestamp|
+-----------------+-------------------+
|0 days 00:00:00.0|1970-01-01 00:00:00|
|0 days 00:30:00.0|1970-01-01 00:30:00|
|0 days 01:00:00.0|1970-01-01 01:00:00|
|0 days 01:30:00.0|1970-01-01 01:30:00|
+-----------------+-------------------+
我建议您使用unix_timestamp将其保留为秒格式,以丢失日期部分。
df.withColumn("Time_timestamp", F.unix_timestamp(F.substring("time",7,9),"HH:mm:ss")).show()
+-----------------+--------------+
| time|Time_timestamp|
+-----------------+--------------+
|0 days 00:00:00.0| 0|
|0 days 00:30:00.0| 1800|
|0 days 01:00:00.0| 3600|
|0 days 01:30:00.0| 5400|
+-----------------+--------------+
或者只是将其保留为字符串:
df.withColumn("Time_timestamp", F.substring("time",7,9)).show()
+-----------------+--------------+
| time|Time_timestamp|
+-----------------+--------------+
|0 days 00:00:00.0| 00:00:00|
|0 days 00:30:00.0| 00:30:00|
|0 days 01:00:00.0| 01:00:00|
|0 days 01:30:00.0| 01:30:00|
+-----------------+--------------+
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。