我尝试格式化时间戳列以包含毫秒,但没有成功。如何将我的时间格式化为这样-2019-01-04 11:09:21.152
?
我已经看过文档并遵循了SimpleDataTimeFormat,pyspark文档说to_timestamp
函数正在使用它。
这是我的数据框。
+--------------------------+
|updated_date |
+--------------------------+
|2019-01-04 11:09:21.152815|
+--------------------------+
我使用毫秒格式没有任何成功如下
>>> df.select('updated_date').withColumn("updated_date_col2",
to_timestamp("updated_date", "YYYY-MM-dd HH:mm:ss:SSS")).show(1,False)
+--------------------------+-------------------+
|updated_date |updated_date_col2 |
+--------------------------+-------------------+
|2019-01-04 11:09:21.152815|2019-01-04 11:09:21|
+--------------------------+-------------------+
我希望将updated_date_col2
化为2019-01-04 11:09:21.152
4条答案
按热度按时间qrjkbowd1#
我认为你可以使用UDF和Python的标准datetime模块如下。
g52tjvyc2#
这不是使用to_timestamp的解决方案,但您可以轻松地将列保持为时间格式
下面的代码是将数字毫秒转换为时间戳的示例之一。
如果在JS中使用
new Date().getTime()
或Date.now()
,或者在Python中使用datetime.datetime.now().timestamp()
,则可以获得数字毫秒。to94eoyn3#
原因是pyspark to_timestamp只解析到秒,而TimestampType能够保存毫秒。
以下解决方法可能有效:
如果时间戳模式包含S,则调用UDF以获取要在表达式中使用的字符串'INTERVAL MILLISECONDS'
要获得间隔256毫秒,我们可以使用Java UDF:
在UDF内部:getIntervalStringUDF(String timeString,String pattern)
1.使用SimpleDateFormat根据模式解析日期
1.使用模式“'INTERVAL'SSS'MILLISECONDS'”将格式化日期返回为字符串
1.解析/格式化异常时返回'INTERVAL 0 MILLISECONDS'
bihw5rsg4#
你可以直接施放力场,它会有毫秒。