Apache spark pyspark-在RDD中使用MatrixFactoryModel';s映射函数

Apache spark pyspark-在RDD中使用MatrixFactoryModel';s映射函数,apache-spark,pyspark,apache-spark-mllib,Apache Spark,Pyspark,Apache Spark Mllib,我有这个模型: from pyspark.mllib.recommendation import ALS model = ALS.trainImplicit(ratings, rank, seed=seed, iterations=iterations, l

我有这个模型:

from pyspark.mllib.recommendation import ALS

model = ALS.trainImplicit(ratings,
                              rank,
                              seed=seed,
                              iterations=iterations,
                              lambda_=regularization_parameter,
                              alpha=alpha)
我已成功地使用它向用户推荐所有产品,方法很简单:

recRDD = model.recommendUsersForProducts(number_recs)
现在,如果我只想向一组项目推荐,我首先加载目标项目:

target_items = sc.textFile(items_source)
然后映射
recommendUsers()
函数,如下所示:

recRDD = target_items.map(lambda x: model.recommendUsers(int(x), number_recs))
在我尝试任何操作后,此操作都会失败,并出现以下错误:

It appears that you are attempting to reference SparkContext from a broadcast variable, action, or transformation. SparkContext can only be used on the driver, not in code that it run on workers. For more information, see SPARK-5063.
我正在本地尝试此操作,因此不确定在客户端或群集模式下此错误是否仍然存在。我曾尝试广播
型号
,但仅在尝试广播时出现相同的错误

我想得对吗?我最终可以只推荐给所有人,然后过滤,但我真的试图避免推荐给每一个项目,因为它们太多了


提前谢谢

我认为没有办法从workers调用
recommendUsers
,因为它最终会调用
callJavaFunc
,它需要SparkContext作为参数。如果
target\u items
足够小,您可以在驱动程序的循环中调用
recommendUsers
(这将是预测所有用户然后过滤的相反极端)


或者,你看过吗?粗略地说,您可以为所有用户运行目标项目的预测,然后自己对其进行排序。

使用
predictAll
建议似乎是个好主意!至少它可以避免一些工作。同时,我实际上一直在循环设定在驱动程序中的目标,只是遗憾没有充分利用火花在这里。。。