【问题标题】:Converting string with nano seconds to timestamp将带有纳秒的字符串转换为时间戳
【发布时间】:2019-05-28 23:23:33
【问题描述】:
我正在尝试将 String 数据类型转换为 Timestamp 数据类型,但结果却是 NONE
示例数据和代码
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) 工作正常,但不是这个。
如何将此格式转换为时间戳?
【问题讨论】:
标签:
apache-spark
pyspark
timestamp
unix-timestamp
【解决方案1】:
您可以使用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'))