遵循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[*]")
以前有人遇到过这个问题吗?
答案 0 :(得分:0)
虽然我没有准确再现您的错误(我得到了另一个错误),但很可能问题出在predict
调用的第二个参数中,该参数应为newData
,而不是{{ 1}}(参见documentation)。
以下是对RStudio本地运行的Spark 2.2.0代码的改编:
data
简单的library(SparkR, lib.loc = "/home/ctsats/spark-2.2.0-bin-hadoop2.7/R/lib") # change the path accordingly here
sparkR.session(sparkHome = "/home/ctsats/spark-2.2.0-bin-hadoop2.7") # and here
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, newData=df) # newData here
showDF(predicted)
# +----+----+------+----------+
# |user|item|rating|prediction|
# +----+----+------+----------+
# | 1.0| 1.0| 3.0| 2.810426|
# | 2.0| 1.0| 1.0| 1.0784092|
# | 0.0| 1.0| 2.0| 1.997412|
# | 1.0| 2.0| 4.0| 3.9731808|
# | 2.0| 2.0| 5.0| 4.8602753|
# | 0.0| 0.0| 4.0| 3.8844662|
# +----+----+------+----------+
也可以。