我的df
有多列
我尝试过的查询:
df=df.withColumn('Column_required',F.when(df.Column_present>1,df.Column_present).otherwise(lag(df.Column_present))
否则无法继续工作。 。我要对其进行操作的列:
Column_present Column_required
40000 40000
Null 40000
Null 40000
500 500
Null 500
Null 500
答案 0 :(得分:1)
我认为您的解决方案可能是使用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
列。如果您的数据框不包含带有monotonically_increasing_id()
的可排序列,则可以自己创建一个id列。