我正在尝试将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
)可以正常工作,但不能满足要求。
如何将这种格式转换为时间戳?
答案 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'))