我正在使用MLlib的矩阵分解来向用户推荐项目。我有一个很大的隐式交互矩阵,M = 2000万用户和N = 50k项目。在训练模型之后,我想获得针对每个用户的推荐的简短列表(例如,200)。我在recommendProductsForUsers
中尝试了MatrixFactorizationModel
,但它非常慢(跑了9个小时,但距离完成还很远。我正在测试50个执行器,每个执行器有8g内存)。这可能是预期的,因为recommendProductsForUsers
需要计算所有M*N
用户项互动,并为每个用户获得最高分。
我会尝试使用更多的执行程序,但是从我在Spark UI上的应用程序详细信息中看到的,我怀疑它可以在几小时或一天内完成,即使我有1000个执行程序(在9小时之后它仍然在{{1}这里https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.scala#L279-L289,总共10000个任务,只完成了200个) 除了增加执行者数量之外,还有其他任何我可以调整的东西来加快推荐过程吗?
以下是示例代码:
flatmap
答案 0 :(得分:1)
例如:我试过
javaSparkContext.setCheckpointDir("checkpoint/");
这有助于避免重复计算。
还尝试为每个Executor和开销spark内存添加更多内存
--conf spark.driver.maxResultSize=5g --conf spark.yarn.executor.memoryOverhead=4000