相当于 sparkR 中的 na.locf

equivalent of na.locf in sparkR

我是 R 的新手,试图在 sparkR 中重写 R 代码。 data.table 上名为 costTbl 的操作之一(还有 5 个其他列)是

costTbl[,cost:=na.locf(cost,na.rm=FALSE),by=product_id]
costTbl[,cost:=na.locf(cost,na.rm=FALSE, fromLast=TRUE),by=product_id]

我无法在 sparkR 中找到等效的操作。我认为可以通过在 product_id 上对 df 进行分组并执行此操作来使用 gapply。但是我无法使代码工作。

gapply 是正确的做法吗?还有其他方法可以实现吗?

从一些虚拟数据开始。

library(SparkR)
library(magrittr)

df <- createDataFrame(data.frame(
  time = c(1, 2, 3, 1, 2, 3),
  product_id = c(1, 1, 1, 2, 2, 2),
  cost = c(1, 2, NA, NA, 2, NA)
))

使用 lastna.rm = TRUE 以及适当的 window 规范。

df %>%
  mutate(
    cost = over(
      last("cost", na.rm = TRUE),
      windowPartitionBy("product_id") %>% orderBy("time") %>% rowsBetween(Window.unboundedPreceding, 0)
    )
  ) %>%
  collect()
#>   time product_id cost locf_cost
#> 1    1          1    1         1
#> 2    2          1    2         2
#> 3    3          1   NA         2
#> 4    1          2   NA        NA
#> 5    2          2    2         2
#> 6    3          2   NA         2

我终于能够使用 SparkR UDF 使用现有的本机 R 代码执行 locf。 我们可以将 gapply 用于此用例,方法是将我的数据框分组到 product_id.

在这里分享了我的发现:https://shbhmrzd.medium.com/stl-and-holt-from-r-to-sparkr-1815bacfe1cc