关于ALS推荐的笛卡尔乘积错误

时间:2018-12-11 17:15:19

标签: apache-spark pyspark

我正在尝试为用户显示电影推荐列表。该模型已经过训练,但是在尝试显示预测时,出现了错误。

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

为什么会这样?谢谢!

2 个答案:

答案 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]))

希望这会有所帮助。