小编Dou*_*s M的帖子

在 Pyspark 中有效计算加权滚动平均值,但有一些注意事项

我正在尝试计算(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... 等来计算它,并且可以使用那。

python apache-spark-sql pyspark

4
推荐指数
1
解决办法
319
查看次数

标签 统计

apache-spark-sql ×1

pyspark ×1

python ×1