PySpark中的正向填充缺少数据不工作
我有一个简单的数据集,如下所示PySpark中的正向填充缺少数据不工作,pyspark,imputation,Pyspark,Imputation,我有一个简单的数据集,如下所示 | id| name| country| languages| |1 | Bob| USA| Spanish| |2 | Angelina| France| null| |3
| id| name| country| languages|
|1 | Bob| USA| Spanish|
|2 | Angelina| France| null|
|3 | Carl| Brazil| null|
|4 | John| Australia| English|
|5 | Anne| Nepal| null|
我试图用最后一个非空值来插补语言中的空值,以在某些行上创建一个窗口,但什么也没有发生。应填充空值的列,temp\u filled\u spark,
保持不变,即原始语言的副本
from pyspark.sql import Window
from pyspark.sql.functions import last
window = Window.partitionBy('name').orderBy('country').rowsBetween(-sys.maxsize, 0)
filled_column = last(df['languages'], ignorenulls=True).over(window)
df = df.withColumn('temp_filled_spark', filled_column)
df.orderBy('name', 'country').show(100)
我希望输出列是:
|temp_filled_spark|
| Spanish|
| Spanish|
| Spanish|
| English|
| English|
有谁能帮忙指出错误吗?我们可以创建一个窗口,将整个数据帧视为一个分区
from pyspark.sql import functions as F
>>> df1.show()
+---+--------+---------+---------+
| id| name| country|languages|
+---+--------+---------+---------+
| 1| Bob| USA| Spanish|
| 2|Angelina| France| null|
| 3| Carl| Brazil| null|
| 4| John|Australia| English|
| 5| Anne| Nepal| null|
+---+--------+---------+---------+
>>> w = Window.partitionBy(F.lit(1)).orderBy(F.lit(1)).rowsBetween(-sys.maxsize, 0)
>>> df1.select("*",F.last('languages',True).over(w).alias('newcol')).show()
+---+--------+---------+---------+-------+
| id| name| country|languages| newcol|
+---+--------+---------+---------+-------+
| 1| Bob| USA| Spanish|Spanish|
| 2|Angelina| France| null|Spanish|
| 3| Carl| Brazil| null|Spanish|
| 4| John|Australia| English|English|
| 5| Anne| Nepal| null|English|
+---+--------+---------+---------+-------+
希望这有帮助 您正在按名称列进行分区,它们是不同的值。因此,将为每个值创建窗口。谢谢@Suresh。如果我不知道我的数据集中是否有不同或非不同的值,该怎么办?不创建窗口就可以从最后一个非空值进行插补吗?谢谢@Suresh,但我的新列仍然保持不变。这是我的代码@Suresh。我正在使用的数据集是从这里获取的:window=window.partitionBy(f.lit(1)).orderBy(f.lit(1)).rowsBetween(-sys.maxsize,0)df.select(“*”,f.last('Standard Error',True.)。over(window)。alias('newcol')。show(50)