Вам нужно создать udf
из вашей функции python и отправить Friday
в виде столбца, так как он не будет транслироваться через фрейм данных. Вы можете сделать это, используя lit
.
from pyspark.sql.functions import udf, next_day, date_sub, to_date, lit
from pyspark.sql.types import DateType
activity_prioritization_rounding.withColumn("New_Date",udf(next_date(col("deadline_rounding"),col("deadline_date"),lit("Friday"), DateType())))
РЕДАКТИРОВАТЬ: Как справедливо упомянуто @jxc, вы не можете использовать функции искры внутри UDF
.
Упрощение этого до when().when().otherwise()
from pyspark.sql.functions import udf, next_day, date_sub, to_date, lit, when, col
day_of_week = "Friday"
activity_prioritization_rounding.withColumn("New_Date", when(
col("deadline_rounding") == -1, date_sub(next_day(col("deadline_date"), day_of_week), 0)).when(
col("deadline_rounding") == 1, date_sub(next_day(col("deadline_date"), day_of_week), 7)).otherwise(
col("deadline_date")))