Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为具有单列的PySpark数据帧正向填充缺失值插补?_Python_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

Python 如何为具有单列的PySpark数据帧正向填充缺失值插补?

Python 如何为具有单列的PySpark数据帧正向填充缺失值插补?,python,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我有一个单列的PySpark数据帧 |等级 |----- | 10 | 10 |空的 |空的 | 15 |空的 | 20 |空的 |空的 | 15 |空的 | 10 我想使用前向填充函数来填充缺失的值 期望输出 |等级 |----- | 10 | 10 | 10 | 10 | 15 | 15 | 20 | 20 | 20 | 15 | 15 | 10 免责声明:我在stackoverflow中有一些解决方案,但当您只有一列作为输入时,它们就不起作用了。请

我有一个单列的PySpark数据帧

|等级 |----- | 10 | 10 |空的 |空的 | 15 |空的 | 20 |空的 |空的 | 15 |空的 | 10 我想使用前向填充函数来填充缺失的值

期望输出

|等级 |----- | 10 | 10 | 10 | 10 | 15 | 15 | 20 | 20 | 20 | 15 | 15 | 10 免责声明:我在stackoverflow中有一些解决方案,但当您只有一列作为输入时,它们就不起作用了。

请查看spark中的和函数

滞后和超前仅用于获得一个偏移。用一个全局变量简单地创建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()

希望这有帮助

你能分享一下scala版本的代码吗?我知道你擅长scala的Spark:DI已经更新了答案,我们无法处理多个空值的滞后和超前。否。我不知道如何将这行rank==null | | | rank.equalsFloat.NaN转换为python如果rank为None或math,您可以这样做。isnanrank:如果这对您有效,您能接受作为答案吗?