相当于 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)
))
使用 last
和 na.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
我是 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)
))
使用 last
和 na.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