我是新的R试图重写一个R代码在sparkR。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。但我无法使代码工作。
采用正确的方法吗?还有其他方法来实现这一点吗?
发布于 2020-11-13 17:20:29
我终于能够使用SparkR UDF来使用现有的本地R代码执行locf。我们可以为这个用例使用gapply,方法是在列product_id上分组我的数据。
在这里分享了我的发现:https://shbhmrzd.medium.com/stl-and-holt-from-r-to-sparkr-1815bacfe1cc
发布于 2020-11-05 12:58:46
从一些虚拟的数据开始。
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)
))将last与na.rm = TRUE和适当的窗口规范结合使用。
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 2https://stackoverflow.com/questions/64651903
复制相似问题