Можно ли применить Facebook Prophet к sparklyr через spark_apply? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь проверить, могу ли я запустить пророк с помощью sparklyr для прогнозирования данных в кластере. Но когда я использую spark_apply, программа застревает.

Запуск sparklyr на edgenode, подключенном к клиенту yarn с помощью spark 2.2.0. Данные о продажах по местоположениям за последние 4 года.

План состоит в том, чтобы создать фрейм данных со всеми данными и разделить данные по местоположениям, затем вызвать пророка в каждом местоположении и получить прогноз на следующие 7 дней.

Здесь я попытался получить данные для одного местоположения и применить пророка, но sparklyr застрял.

library("sparklyr")
library("prophet")
sc <- spark_connect(master = "yarn-client",version = "2.2.0"))
query = "select * from saletable"
df <- sdf_sql(sc,query) %>%
         filter(locationid=="1111") %>% 
         select(date,sales) %>%
         sdf_repartition(partitions=1) %>%
         select(ds=date,y=sales)

## try to predict sales the next 7 days and get the predictions

sparkly_prophet <- function(df){
    m <- prophet::prophet(df)
    future <- prophet::make_future_dataframe(m,periods=7,freq='day')
    forecast <- predict(m,future)
    return (dplyr::select(forecast,yhat) %>% tail(7))
}


## then I run but it stucked

spark_apply(df,sparkly_prophet)

1 Ответ

0 голосов
/ 05 июня 2019

Когда я использовал spark_apply(), у меня был лучший успех, включая определение функции в вызове spark_apply().Я не уверен, почему это так, но, возможно, стоит перестроить код как

spark_apply(
  df, 
  function(df) {
    m <- prophet::prophet(df)
    future <- prophet::make_future_dataframe(m, periods = 7, freq = "day")
    forecast <- predict(m, future)
    yhat <- dplyr::select(forecast, yhat) 
    return(tail(yhat, 7))
  }
)
...