在Spark的MLLib中进行协同过滤,需要一个(int)UserID?

时间:2016-02-16 01:01:10

标签: python apache-spark apache-spark-mllib

我一直在Spark的MLLib中使用Implicit Collaborative Filtering ALS算法。

我的数据采用以下格式(第一列是用户,第二列是商品,第三列是购买的隐含):

user_10, item_200, 1

问题是我在使用代码时,是否需要使用Rating类,它需要以下格式的输入:

Rating, (int(self.user), int(self.product), float(self.rating))

因此,当我尝试创建模型时,我收到一个错误,因为我无法将User和Item的字符串转换为int。是否有另一种选择可以避免使用Ratings类或修改,因此不需要int?

from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
data = sc.textFile("test.csv")

ratings = data.map(lambda l: l.split(','))\
              .map(lambda l: Rating(l[0], l[1], float(l[2])))

# Build the recommendation model using Alternating Least Squares
rank = 10
numIterations = 10
alpha = 0.01
model = ALS.trainImplicit(ratings, rank, numIterations, alpha)

1 个答案:

答案 0 :(得分:0)

评级需要一个int,所以我只想将用户和项目转换为整数。在创建评级时进行一些转换,它应该有效。