我有一个数据帧,其中包含某个月某个存储的值。看起来像
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的建议。如何定义哪些月份缺失?我可以创建包含所有所需月份的引用数据框并执行外部联接,但是从最后一个可用月份到添加月份的值填充的好方法是什么?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐