我一直在测试http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html#explicit-vs-implicit-feedback上的示例代码,并用我自己的数据替换了其中的数据。
当我将alpha设置为大于1时,正如源论文中所建议的,
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=4781121
我得到了以下错误:
Py4JError: 在调用o629.trainImplicitALSModel时发生错误。跟踪:py4j.Py4JException: 方法trainImplicitALSModel([class org.apache.spark.api.java.JavaRDD, class java.lang.Integer, class java.lang.Integer, class java.lang.Double, class java.lang.Integer, class java.lang.Integer, class java.lang.Boolean, null])不存在
PySpark中alpha的限制是否小于1?
回答:
PySpark除了Scala后端已经强制执行的限制外,不会强制执行任何其他限制,但类型很重要。这意味着:
ALS.trainImplicit(ratings, rank, numIterations, alpha=100.0)
与
ALS.trainImplicit(ratings, rank, numIterations, alpha=100)
不同,后者由于类型不匹配而无效。换句话说,类型很重要。Python的float
被表示为java.lang.Double
,Python的int
被表示为java.lang.Integer
。