Я думаю, что вашим решением может быть использование last
вместо задержки:
df_new = spark.createDataFrame([
(1, 40000), (2, None), (3,None), (4,None),
(5,500), (6,None), (7,None)
], ("id", "Col_present"))
df_new.withColumn('Column_required',when(df_new.Col_present>1,df_new.Col_present).otherwise(last(df_new.Col_present,ignorenulls=True).over(Window.orderBy("id")))).show()
Это даст желаемый результат:
+---+-----------+---------------+
| id|Col_present|Column_required|
+---+-----------+---------------+
| 1| 40000| 40000|
| 2| null| 40000|
| 3| null| 40000|
| 4| null| 40000|
| 5| 500| 500|
| 6| null| 500|
| 7| null| 500|
+---+-----------+---------------+
Но учтите, чтоФункция window
требует сортировки по столбцу.Вот почему я использовал столбец id
в примере.Вы можете создать столбец id самостоятельно, если ваш фрейм данных не содержит сортируемый столбец с monotonically_increasing_id()
.