我正在尝试为用户显示电影推荐列表。该模型已经过训练,但是在尝试显示预测时,出现了错误。
als = ALS(maxIter=5, regParam=0.01, userCol="userID",
itemCol="movieID", ratingCol="rating")
# ratings is a DataFrame of (movieID, rating, userID)
model = als.fit(ratings)
# allMovies is a DataFrame of (movieID, userID)
# it has userID=0 and all distinct movieID
recommendations = model.transform(allMovies)
recommendations.take(20)
使用from pyspark.ml.recommendation.ALS
库和
运行最后一行时,出现错误
Detected cartesian product for LEFT OUTER join between logical plans
。
为什么会这样?谢谢!
答案 0 :(得分:1)
回答我自己的问题。看来您不应该使用transform
方法,而应该使用recommendForUserSubset
。
答案 1 :(得分:0)
在进行model.transform之前,您必须定义ALS之类的ALS(input_col ='类似于输入特征的东西',output_col =预测值),否则您可以使用这种方法。
rank = 10
numIterations = 100
model = ALS.train(ratings, rank, numIterations) #where ratings is dataframe
recommendation = model.predictAll(alMovies).map(lambda r: ((r[0], r[1]), r[2]))
希望这会有所帮助。