使用ML spark和数据框架进行隐式推荐



我正在尝试使用Spark和Dataframes的新ML库来构建具有隐式评级的推荐器。我的代码

from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import Row 
from pyspark.ml.recommendation import ALS
sc = SparkContext()
sqlContext = SQLContext(sc)
# create the dataframe (user x item)
df = sqlContext.createDataFrame(
    [(0, 0), (0, 1), (1, 1), (1, 2), (2, 1), (2, 2)],
    ["user", "item"])
als = ALS() 
    .setRank(10) 
    .setImplicitPrefs(True)
model = als.fit(df)
print "Rank %i " % model.rank
model.userFactors.orderBy("id").collect()
test = sqlContext.createDataFrame([(0, 2), (1, 0), (2, 0)], ["user", "item"])
predictions = sorted(model.transform(test).collect(), key=lambda r: r[0])
for p in predictions: print p

然而,我运行在这个错误

pyspark.sql.utils。AnalysisException:无法解析给定输入列user, item;

所以,不确定如何定义数据帧

我很困惑,因为MLLIB API对隐式

有单独的API调用http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html

val alpha = 0.01
val lambda = 0.01
val model = ALS.trainImplicit(ratings, rank, numIterations, lambda, alpha)

看起来您正在尝试使用(用户,产品)元组,但您需要(用户,产品,评级)三元组。即使是隐性评级,你也需要评级。如果它们都相同,可以使用1.0这样的常量

最新更新