属性错误:“ datetime.timedelta”对象没有属性“ _get_object_id”

时间:2019-03-21 10:06:23

标签: pyspark pyspark-sql

尝试创建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 :(得分:0)

您需要使用用户定义的函数(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)))