【问题标题】:equivalent of na.locf in sparkR相当于 sparkR 中的 na.locf
【发布时间】:2021-02-15 11:38:33
【问题描述】:

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

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 是正确的方法吗?有没有其他方法可以实现这一点?

【问题讨论】:

    标签: r apache-spark-sql sparkr locf


    【解决方案1】:

    从一些虚拟数据开始。

    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 和适当的窗口规范一起使用。

    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
    

    【讨论】:

      【解决方案2】:

      我终于能够使用 SparkR UDF 使用现有的原生 R 代码执行 locf。 我们可以在这个用例中使用 gapply,方法是将我的数据框分组到 product_id 列上。

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

      【讨论】:

        猜你喜欢
        • 2020-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-11
        • 2013-06-11
        • 2013-07-18
        相关资源
        最近更新 更多