Python 如何使用UDAF填充PySpark数据帧中的时间间隔
我有一个数据框,其中包含某个月某个存储的值。看起来像Python 如何使用UDAF填充PySpark数据帧中的时间间隔,python,pyspark,user-defined-functions,Python,Pyspark,User Defined Functions,我有一个数据框,其中包含某个月某个存储的值。看起来像 df:pyspark.sql.dataframe.DataFrame TRADEID:integer time_period:date VALUE:double 理想情况下,对于每个TRADEID,一年中的每个月都应该有值,但是,对于某些TRADEID,某些月份会被跳过 我需要用上一个月可用的值来填补这些空白,例如 老df |TRADEID|time_period|value| +-------+-----------+-----+ |
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)
有一个类似的例子,但它没有回答以下问题:1.从性能的角度来看,这是最佳的方式吗?有很多TRADEID和数百万行数据。
2.关于如何编写性能良好的UDAF的任何建议。如何定义缺失的月份?我可以创建包含所有所需月份的参考数据框并进行外部联接,但从上一个可用月份到添加月份的填充值的好方法是什么?可能重复的可能重复的