我有一个数据框,其中包含特定月份某个商店的值。看起来像
df:pyspark.sql.dataframe.DataFrame
TRADEID:integer
time_period:date
VALUE:double
理想情况下,对于每个TRADEID,一年中每个月都应该有值,但是,对于某些TRADEID,则跳过了几个月。
我需要用上一个可用月份(例如
)中的值来填补这些空白旧df
|TRADEID|time_period|value|
+-------+-----------+-----+
| 1| 31-01-2019| 5|
| 1| 31-03-2019| 6|
| 2| 31-01-2019| 15|
| 2| 31-03-2019| 20|
+-------+-----------+-----+
新df
|TRADEID|time_period|value|
+-------+-----------+-----+
| 1| 31-01-2019| 5|
| 1| 28-02-2019| 5|
| 1| 31-03-2019| 6|
| 2| 31-01-2019| 15|
| 2| 28-02-2019| 15|
| 2| 31-03-2019| 20|
+-------+-----------+-----+
据我了解,我可以使用UDAF,过程看起来像
df.groupby('TRADEID').apply(UDAF)
有一个类似的question,但是它不能回答以下问题:
1.从性能角度来看,这是最佳方法吗?有大量的TRADEID和数百万行的数据。
2.关于如何编写我需要的性能良好的UDAF的任何建议。如何定义缺少的月份?我可以创建具有所有需要月份的参考数据框并进行外部联接,但是从上一个可用月份到添加月份填充值的好方法是什么?