Ошибка атрибута: у объекта datetime.timedelta нет атрибута _get_object_id - PullRequest
0 голосов
/ 21 марта 2019

Попытка создать 30-минутный интервал времени, и я получаю следующее сообщение об ошибке атрибута:

У объекта 'datetime.timedelta' нет атрибута '_get_object_id'

Входящий столбец называется меткой времени и содержит метку времени типа схемы.например,

2019-02-01T15: 53: 44Z

Я не могу понять, почему я получаю ошибку, учитывая, что приведенный ниже код должен быть в состоянии принятьметка времени.

    def ceil_dt(dt, delta):
    return dt + (datetime.min - dt) % delta

df = df.withColumn("bucket_timestamp", ceil_dt(df.timestamp, timedelta(minutes=30)))
return df

1 Ответ

0 голосов
/ 21 марта 2019

Вам необходимо использовать пользовательскую функцию (UDF):

from pyspark.sql.types import *
from pyspark.sql import functions as f
from pyspark.sql import Row
from datetime import datetime, timedelta

# example DF
date = datetime.strptime('2019-02-01T15:53:44', '%Y-%m-%dT%H:%M:%S')
df = sc.parallelize([Row(timestamp=date)]).toDF()

# define UDF based on OP's function
ceil_dt = (f.udf(lambda dt, delta:  dt + (datetime.min - dt) % timedelta(minutes=delta),
                TimestampType()))

# now apply to timestamp columns
df = df.withColumn("bucket_timestamp", ceil_dt(df.timestamp, f.lit(30)))
...