Преобразование строки с нано секундами в метку времени - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь преобразовать тип данных 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) работают нормально, но не этот.
Как преобразовать этот формат в метку времени?

1 Ответ

0 голосов
/ 02 января 2019

Вы можете использовать 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'))
...