尝试创建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
答案 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)))