等效于sparkR

问题描述

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

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

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

正确的方法是正确的吗?还有其他方法可以实现这一目标吗?

解决方法

从一些虚拟数据开始。

library(SparkR)
library(magrittr)

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

lastna.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         2
,

我终于可以使用SparkR UDF使用现有的本机R代码执行locf。 通过将我的数据框分组在列product_id上,我们可以在此用例中使用gapply。

在这里分享了我的发现:https://homeassistant.io

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...