将纳秒级的字符串转换为时间戳

时间:2019-01-02 09:50:26

标签: apache-spark pyspark timestamp unix-timestamp

我正在尝试将String数据类型转换为Timestamp数据类型,但结果是我没有得到

样本数据和代码

20181016T192403.635918+02:00

date_format = "yyyyMMdd'T'HHmmss.SSSSSSZ”
data_frame = data_frame.withColumn('dob_ts', unix_timestamp('dob', date_format).cast(‘timestamp’)

其他格式(yyyyMMdd'T'HHmmss.SSS)可以正常工作,但不能满足要求。
如何将这种格式转换为时间戳?

1 个答案:

答案 0 :(得分:0)

您可以使用udf定义函数。因此,在用户定义的函数中,您可以通过if或所需的代码来处理这种情况:

from pyspark.sql.functions import udf 
from datetime import datetime
from pyspark.sql.types import TimestampType

def date_time_to_date(input_date_time):
     split_ind = input_date_time.find('T')
     new_date = input_date_time
     if split_ind > -1:
         new_date = input_date_time[:split_ind] + input_date_time[split_ind + 1:]
     return datetime.strptime(input_date_time, '%Y%m%d %H%M%S.%f')

udf_date_time_to_date = udf(new_date, TimestampType())

data_frame = data_frame.withColumn('dob_ts', udf_date_time_to_date('dob'))