Я хочу выполнить накопительный продукт, предыдущие успешные ответы используют логарифмические суммы c для дела. Тем не менее, есть ли способ использовать Numpy Cumsum. Я пытался без четкого результата, вот мой код:
import numpy as np
def cumulative_product (x):
"""Calculation of cumulative product using numpy function cumprod.
"""
return np.cumprod(float(x)).tolist()
spark_cumulative_product = udf(cumulative_product, ArrayType(DoubleType()))
# the dataset in question:
param.show()
Что дает мне, например:
+--------------+-----+
|financial_year| wpi|
+--------------+-----+
| 2014|1.026|
| 2015|1.024|
| 2016|1.021|
| 2017|1.019|
| 2018|1.021|
+--------------+-----+
При применении
param = param.withColumn('cum_wpi', spark_cumulative_product(param_treasury['wpi']))
param.show()
У меня есть что нет никаких изменений, т.е.
+--------------+-----+-------+
|financial_year| wpi|cum_wpi|
+--------------+-----+-------+
| 2014|1.026|[1.026]|
| 2015|1.024|[1.024]|
| 2016|1.021|[1.021]|
| 2017|1.019|[1.019]|
| 2018|1.021|[1.021]|
+--------------+-----+-------+
Может кто-нибудь помочь с тем, что идет не так, или если есть лучший способ сделать cumprod без использования exp-sum-log -Update: желаемый результат:
+--------------+-----+-------+
|financial_year| wpi|cum_wpi|
+--------------+-----+-------+
| 2014|1.026| 1.026 |
| 2015|1.024| 1.051 |
| 2016|1.021| 1.073 |
| 2017|1.019| 1.093 |
| 2018|1.021| 1.116 |
+--------------+-----+-------+