首页 > 解决方案 > 在 sparklyr 中计算累积和

问题描述

如何计算 sparklyr 中的累积总和?

dplyr:

iris %>% group_by(Species) %>% mutate(col = cumsum(Sepal.Length))

cumsum不是 sparklyr 中包含的功能,我如何在 sparklyr 中重现它?

我认为火花 SQL 将如下?:

SELECT
    *,
    sum(Sepal.Length) OVER (PARTITION BY Species ORDER BY index) as col
FROM
iris

更新: cumsum是一个可以在 sparklyr 中使用的函数,它只需要首先调用一个排列动词(这在本地 r 中不是必需的)

iris %>% 
  sdf_copy_to %>% 
  group_by(Species) %>% 
  arrange(Sepal.Length) %>%
  mutate(col = cumsum(Sepal.Length))

标签: rapache-sparkdplyrsparklyrcumsum

解决方案


如果您知道正确的语法,您可以在 sparklyr 中编写 SQL,在这种情况下,原始 SQL(假设您的索引是 Sepal_Length)是:

SELECT * 
  , SUM(Sepal_Length) OVER (PARTITION BY Species ORDER BY Sepal_Length) AS CumSum
FROM iris 

如果您想在 sparklyr 中执行此操作,您只需执行以下操作:

iris2 <- iris %>%
          mutate(CumSum = sql("
                 SUM(Sepal_Length) OVER (PARTITION BY Species ORDER BY Sepal_Length)
                 ")) 

推荐阅读