Это потому, что вы передаете тип столбца в относительную функцию, df ['months_since_act'] возвращает тип столбца, а не int
relativedelta(months = (df['months_since_act']).cast("integer"))
Я не уверен, чего именно вы хотите достичь.
Однако синтаксис должен быть таким при приведении типа столбца к целочисленному в искре
relativedelta(months = (df['value'].cast(IntegerType())))
Пример для UDF -
def getDelta(month):
return datetime.datetime.today() - relativedelta(months = month)
delta = udf(lambda z: getDelta(z), IntegerType())
start_month =(
df.select('client_id')
.withColumn("acquisition_month",delta(df['months_since_act'].cast(IntegerType())))
)
Хотя я не проверял его, ноэто даст вам представление.