Python Spark'中的协同过滤;s MLLib,是否需要一个(int)作为用户ID?

Python Spark'中的协同过滤;s MLLib,是否需要一个(int)作为用户ID?,python,apache-spark,apache-spark-mllib,Python,Apache Spark,Apache Spark Mllib,我一直在Spark的MLLib中使用隐式协同过滤ALS算法 我的数据采用以下格式(第一列是用户,第二列是项目,第三列是隐含的购买): 我在处理代码时遇到的问题是,它需要使用Rating类,该类需要以下格式的输入: Rating, (int(self.user), int(self.product), float(self.rating)) 因此,当我尝试创建模型时,我收到一个错误,因为我无法将User和Item的字符串转换为int。是否有其他选项可以避免使用Ratings类或修改以不需要int

我一直在Spark的MLLib中使用隐式协同过滤ALS算法

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

我在处理代码时遇到的问题是,它需要使用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)

评级需要整数,所以我只需要将用户和项目转换为整数。当你创建你的评级时,进行一些转换,它应该会起作用

我看不出有任何问题,如果每个用户和产品都不同,那么您可以创建一个
字典
或一个
列表
,其中包含真实的
id
和新的独特的
int
id,对于每个产品和用户。您的两个
映射
转换只能由one@AlbertoBonsanto-用户和项目将在dataset@jKraut您最终是如何解决这个问题的?@jKraut除了创建自己的字典以将字符串值映射到唯一的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)