首页 > 解决方案 > facebook Prophet 可以通过 spark_apply 应用于 sparklyr

问题描述

我正在尝试测试是否可以使用 sparklyr 运行先知来预测集群中的数据。但是当我使用 spark_apply 时,程序卡住了。

在连接到带有 spark 2.2.0 的纱线客户端的边缘节点上运行 sparklyr。数据是过去 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 gets stuck

spark_apply(df,sparkly_prophet)

标签: sparklyrfacebook-prophet

解决方案


当我使用. 时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))
  }
)

推荐阅读