如何用PySpark中该列的第一个非空值填充该列的空值

时间:2021-03-16 12:04:48

标签: apache-spark pyspark apache-spark-sql

我正在尝试使用同一列的第一个非空值填充数据框列的空值。

我要填写的数据框如下所示,我希望“id_book”列的所有行都具有相同的编号

1

我尝试了以下但它仍然显示空值

w = Window.partitionBy('id_book').orderBy('id_book', 'date').rowsBetween(0,sys.maxsize)
filled_column = first(spark_df['id_book'], ignorenulls=True).over(w)
spark_df_filled = union_dias.withColumn('id_book_filled_spark', filled_column)

1 个答案:

答案 0 :(得分:0)

窗口应该是

w = Window.orderBy('date').rowsBetween(0, Window.unboundedFollowing)
filled_column = first(spark_df['id_book'], ignorenulls=True).over(w)
spark_df_filled = spark_df.withColumn('id_book_filled_spark', filled_column)

因为您不想按 id_book 进行分区。也没有必要按 id_book 排序,因为只有日期的顺序才重要。

另外我认为更好的做法是使用 Window.unboundedFollowing 而不是 sys.maxsize