【发布时间】:2017-12-10 15:37:25
【问题描述】:
按照 ALS 示例 here
...但在分布式模式下运行,例如
Sys.setenv("SPARKR_SUBMIT_ARGS"="--master yarn sparkr-shell")
spark <- sparkR.session(master = "yarn",
sparkConfig = list(
spark.driver.memory = "2g",
spark.driver.extraJavaOptions =
paste("-Dhive.metastore.uris=",
Sys.getenv("HIVE_METASTORE_URIS"),
" -Dspark.executor.instances=",
Sys.getenv("SPARK_EXECUTORS"),
" -Dspark.executor.cores=",
Sys.getenv("SPARK_CORES"),
sep = "")
))
ratings <- list(list(0, 0, 4.0), list(0, 1, 2.0), list(1, 1, 3.0), list(1, 2, 4.0),list(2, 1, 1.0), list(2, 2, 5.0))
df <- createDataFrame(ratings, c("user", "item", "rating"))
model <- spark.als(df, "rating", "user", "item")
stats <- summary(model)
userFactors <- stats$userFactors
itemFactors <- stats$itemFactors
# make predictions
summary(model)
predicted <- predict(object=model, data=df)
我收到以下错误:
Error in UseMethod("predict") :
no applicable method for 'predict' applied to an object of class "ALSModel"
查看source for 2.1.1 方法似乎存在,并且直接在其上方定义的summary() 函数工作正常。
我尝试过使用 Spark、2.1.0、2.1.1 和 2.2.0-rc6,所有这些都给出了相同的结果。此外,这不仅限于 ALS 模型,对任何模型调用 predict() 都会产生相同的错误。
当我在本地模式下运行它时也会遇到同样的错误,例如
spark <- sparkR.session("local[*]")
以前有人遇到过这个问题吗?
【问题讨论】:
-
您是在本地运行它还是通过
spark-submit在集群中运行它?为什么你在脚本中设置所有这些提交参数?您是否明确使用library(SparkR) in your script? -
我正在运行这是分布式模式,这就是额外的参数在 session() 中的原因。是的,我在脚本中明确调用
library(SparkR)。补充一下,我最后使用 Spark 2.1.1 解决了这个问题,这是我设法让它工作的唯一版本。 -
再一次,这些额外的参数不是通常的过程(通常你在命令行中提供它们)。一旦你解决了问题,最好回答你自己的问题,以便将来对其他人有用。
-
从 RStudio 中启动 Spark 时需要这些参数。
标签: r apache-spark machine-learning apache-spark-mllib sparkr