在sparklyr中计算累计和

Calculating cumulative sum in 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 中使用的函数,它只需要先调用一个 arrange 动词(这在本地 r 中不是必需的)

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

如果您知道正确的语法,您可以在 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)
                 ")) 

问题更新中的示例代码是无效语法,使用 SQL 非常麻烦。我相信以下才是真正的 sparklyr 方法:

library(tidyverse)
library(sparklyr) 
   
data("iris")

sc <- spark_connect()

iris %>% 
     sdf_copy_to(sc=sc, overwrite=T) %>% 
     group_by(Species) %>% 
     arrange(Sepal_Length) %>%
     mutate(col = cumsum(Sepal_Length)) %>%
     ungroup