如何使用UDAF填补PySpark数据帧中的时间空白

时间:2019-08-16 13:24:46

标签: python pyspark user-defined-functions

我有一个数据框,其中包含特定月份某个商店的值。看起来像

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的任何建议。如何定义缺少的月份?我可以创建具有所有需要月份的参考数据框并进行外部联接,但是从上一个可用月份到添加月份填充值的好方法是什么?

0 个答案:

没有答案