我正在尝试计算(partition by id1, id2 ORDER BY unixTime)Pyspark窗口上的滚动加权平均值,想知道是否有人对如何执行此操作有想法。
滚动平均将采用当前行的列值、该列的前 9 个行值和该列的 9 个后续行值,并根据每个值在该行中的方式加权。因此,当前行的权重为 10 倍,滞后 1/领先 1 值的权重为 9 倍。
如果没有一个值为空,那么加权平均值的分母将为 100。 一个警告是,如果有空值,我们仍然要计算移动平均值(除非有超过 1/2 的值是空值)。
因此,例如,如果当前 val 之前的 9 个值为空,则分母将为 55。如果超过 1/2 的值为空,那么我们将为加权平均值输出 NULL。我们也可以使用我们说如果分母小于 40 或其他什么的逻辑,输出 null。
我附上了一个屏幕截图来解释我在说什么,以防它令人困惑,希望这可以解决问题:

我知道我可以在 sql 中执行此操作(并且我可以将数据框保存为临时视图),但是因为我必须为多列执行此滚动平均(完全相同的逻辑),理想情况下,如果我可以在 Pyspark 中执行此操作,我会能够编写一个 for 循环,然后为每一列执行此操作。另外,我很想有效地做到这一点。我已经阅读了许多关于滚动平均值的主题,但我认为这种情况略有不同。
对不起,如果我过于复杂,希望它是有道理的。如果这不容易有效地完成,我知道如何通过在窗口上列出 lag(val, 10)... lag(val, 9) over window... 等来计算它,并且可以使用那。