эквивалент na.locf в sparkR

Я новичок в 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. Я думал, что gapply можно использовать, сгруппировав df по product_id и выполнив эту операцию. Но я не могу заставить код работать.

Gapply - правильный подход? Есть ли другой способ добиться этого?


person raizsh    schedule 02.11.2020    source источник


Ответы (2)


Начнем с фиктивных данных.

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         2
person Paul    schedule 05.11.2020

Я наконец смог использовать SparkR UDF для выполнения locf с использованием существующего нативного кода R. Мы можем использовать gapply для этого варианта использования, сгруппировав мой фрейм данных по столбцу product_id.

Поделился своими выводами здесь: https://shbhmrzd.medium.com/stl-and-holt-from-r-to-sparkr-1815bacfe1cc

person raizsh    schedule 13.11.2020