我正在尝试使用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,rating。由于它是隐式反馈,因此评级为1或0.我在第二个链接中运行相同的代码,但使用model = ALS.trainImplicit(rating,rank,numIterations,alpha = 0.01)。我收到以下错误:spark-1.1.0 / python / pyspark / rdd.py“,第760行,在reduce中 return reduce(f,vals) TypeError:没有初始值的空序列的reduce()。
我看到在第二个链接中编写的代码中没有vals参数。错误来自何处以及我们如何解决?
答案 0 :(得分:1)
通常情况下,如果mllib中发生错误,您将不会收到Python错误,因为trainImplicit
的大部分代码都是用Scala编写的(Python部分只是一个包装器) Scala代码)。我认为reduce()
中的此错误是由于某些预处理或您在ratings
RDD中所做的事情而导致的,并且由于延迟评估,它只会在错误时抛出错误在trainImplicit
方法中使用它。