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

Posted

技术标签:

【中文标题】如何在 PySpark 中用该列的第一个非空值填充该列的空值【英文标题】:How to fill out the null values of a column with the first non null value of that column in PySpark 【发布时间】:2021-03-16 12:04:48 【问题描述】:

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

我要填写的数据框是这样的,我希望 'id_book' 列的所有行都具有相同的编号

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

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】:

窗口应该是

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

【讨论】:

以上是关于如何在 PySpark 中用该列的第一个非空值填充该列的空值的主要内容,如果未能解决你的问题,请参考以下文章

从 Pyspark 中的数据框中计算空值和非空值

Pyspark中组连接函数的持久循环数据帧

Pyspark - 计算每个数据框列中的空值数量

在 PySpark 中为每一行查找最新的非空值

如何使用 LINQ 将空值发送到 ASP.NET 中的非空列

约束的类型