【发布时间】:2018-09-15 04:17:04
【问题描述】:
我有一个简单的数据集,如下所示。
| id| name| country| languages|
|1 | Bob| USA| Spanish|
|2 | Angelina| France| null|
|3 | Carl| Brazil| null|
|4 | John| Australia| English|
|5 | Anne| Nepal| null|
我正在尝试使用pyspark.sql.window 将languages 中的空值与最后一个非空值估算,以在某些行上创建一个窗口,但没有发生任何事情。应该填充空值的列 temp_filled_spark, 保持不变,即原始 languages 列的副本。
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|
谁能帮忙指出错误?
【问题讨论】:
-
您按名称列进行分区,它们是不同的值。因此,将为每个值创建窗口。
-
谢谢@Suresh。如果我不知道我的数据集中是否有不同的或非不同的值怎么办?是否可以在不创建窗口的情况下从最后一个非空值进行估算?
标签: pyspark imputation