1

我正在关注 ALS 的 sparkR 示例:

# Load training data
data <- 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(data, c("userId", "movieId", "rating"))
training <- df
test <- df

# Fit a recommendation model using ALS with spark.als
model <- spark.als(training, maxIter = 5, regParam = 0.01, userCol = "userId",
                   itemCol = "movieId", ratingCol = "rating")

# Model summary
summary(model)

# Prediction
predictions <- predict(model, test)
head(predictions)

哪个工作正常,但我遇到以下问题:

如何指定要推荐的项目数量?

在python示例中很清楚:

movieSubSetRecs = model.recommendForItemSubset(movies, 10)

但是对于 sparkR,我没有发现。

另外,我不能更改为 sparklyr,必须使用 sparkR

4

1 回答 1

1

SparkR 开发人员没有提供对该方法的访问权限。他们使用 ALSWrapper 隐藏大部分方法。所以这里是调用这个方法的技巧。

# get alsModel from wrapper and call recommendForAllUsers method from it
jdf<-sparkR.callJMethod( sparkR.callJMethod(model@jobj, "alsModel"), "recommendForAllUsers", as.integer(10))
# create R object from java object, is there better way?
df <- new("SparkDataFrame", jdf, FALSE)
于 2020-03-27T15:14:21.590 回答