我有一个带有单列的PySpark数据框。
| Rank
|----------
| 10
| 10
| null
| null
| 15
| null
| 20
| null
| null
| 15
| null
| 10
我想使用pandas ffill()函数等前向填充来估算缺失值。
所需的输出
| Rank
|----------
| 10
| 10
| 10
| 10
| 15
| 15
| 20
| 20
| 20
| 15
| 15
| 10
免责声明:我在stackoverflow中有一些解决方案但是当你只有一个列作为输入时它们不会工作。
答案 0 :(得分:1)
lag和lead仅用于获取一个偏移量。使用全局变量简单地创建udf
应该可以解决问题
下面是简单的例子
var PRV_RANK = 0f
import spark.implicits._
val data = spark.sparkContext.parallelize(Seq(10f, 10f, Float.NaN, Float.NaN, 15f, Float.NaN, 20f, Float.NaN, Float.NaN, 15f, Float.NaN, 10f))
.toDF("rank")
val forwardFill = udf((rank: Float) =>
{
if (rank == null || rank.equals(Float.NaN)){
PRV_RANK
}
else {
PRV_RANK = rank
rank
}
})
data.withColumn("rankNew", forwardFill($"rank")).show()
希望这有帮助!