from pyspark.ml.recommendation import ALS, ALSModel
from pyspark.ml.tuning import ParamGridBuilder, CrossValidator
from pyspark.mllib.evaluation import RegressionMetrics, RankingMetrics
from pyspark.ml.evaluation import RegressionEvaluator
als = ALS(maxIter=15,
regParam=0.08,
userCol="ID User",
itemCol="ID Film",
ratingCol="Rating",
rank=20,
numItemBlocks=30,
numUserBlocks = 30,
alpha = 0.95,
nonnegative = True,
coldStartStrategy="drop",
implicitPrefs=False)
model = als.fit(training_dataset)
model.save('model')
每次我调用save方法时jupyter notebook都会给出类似的错误
An error occurred while calling o477.save.
: org.apache.spark.SparkException: Job aborted.
at org.apache.spark.internal.io.SparkHadoopWriter$.write(SparkHadoopWriter.scala:106)
我知道之前的SO问题和答案,并尝试过这个:
model.save('model')
.
model.write().save("saved_model")
.
als.write().save("saved_model")
.
als.save('model')
.
import pickle
s = pickle.dumps(als)
.
als_path = "from_C:Folder_to_my_project_root" + "/als"
als.save(als_path)
我的问题是如何保存ALS模型,以便我可以加载它没有训练每次我运行程序
我曾经运行过这个问题,我在netflix奖励数据集运行推荐,总共有1亿条记录。这就是我所做的,试着运行50%的数据,慢慢地增加百分比,看看哪里出错了。在我的例子中,这些数据慢慢地增加到100%。关闭不必要的Chrome选项卡也有帮助
基本上,o477和oXXX错误一般意味着有错误,而做的工作。既然您正在做电影推荐,我假设您使用movielens或Netflix数据集。它可以是以下其中一种:
- 文件太大,无法pickle
- 模型太复杂,内存不足