如何解决Pyspark:使用最后一个值前向填充空值
我有一个与此相似的数据框:
values = [
("2019-10-01","004",1.0),("2019-10-02","005",None),("2019-10-03",2.0),("2019-10-04",("2019-10-05","006",None)
]
df = spark.createDataFrame(values,['time','mode','value'])
我想用上一个非空值填充最后一栏中的“无”。
("2019-10-01",1.0)
我尝试过:
import pyspark.sql.functions as f
from pyspark.sql.window import Window
df_2 = df.withColumn("value2",f.last('value',ignorenulls=True).over(Window.orderBy('time').rowsBetween(Window.unboundedPreceding,0)))
这不起作用,因为新列中仍然有空值。 如何向前填充最后一列?
解决方法
您的窗口操作只有一个小错误,请尝试以下操作:
from pyspark.sql import functions as f,Window
window_last = Window.orderBy("time")
df_2 = df.withColumn("value2",f.last("value",ignorenulls=True).over(window_last))
结果:
+----------+----+-----+------+
| time|mode|value|value2|
+----------+----+-----+------+
|2019-10-01| 004| 1.0| 1.0|
|2019-10-02| 005| null| 1.0|
|2019-10-03| 004| 2.0| 2.0|
|2019-10-04| 004| 1.0| 1.0|
|2019-10-05| 006| null| 1.0|
+----------+----+-----+------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。