1

我正在尝试使用 Spark MLlib 构建隐式反馈推荐系统。我首先在此链接https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html中运行有关 MovieLens 数据集的教程中的代码。代码运行成功。然后我运行此链接中的代码https://spark.apache.org/docs/1.1.0/mllib-collaborative-filtering.html#explicit-vs-implicit-feedback带有用于明确反馈的测试数据集。它运行良好。然后我给出我的数据集,其形式为 UserID、MovieID、评级。由于它是隐式反馈,因此评分将为 1 或 0。我在第二个链接中运行相同的代码,但使用 model = ALS.trainImplicit(ratings, rank, numIterations, alpha = 0.01)。我收到以下错误:spark-1.1.0/python/pyspark/rdd.py",第 760 行,在 reduce 中 return reduce(f, vals) TypeError: reduce() of empty sequence with no initial value。

我看到第二个链接中编写的代码中没有 vals 参数。错误来自哪里,我们如何解决?

4

1 回答 1

1

通常,如果错误发生在 mllib 中,您将不会收到 Python 错误,因为大部分代码trainImplicit是用 Scala 编写的(Python 部分只是 Scala 代码的包装器)。我相信这个错误reduce()是由于一些预处理或你在ratingsRDD中做的事情以及由于延迟评估,它只会在trainImplicit方法中使用它时抛出错误。

于 2015-04-20T04:32:02.410 回答