jupyter中运行Spark推荐算法实例

jupyter中运行Spark推荐算法实例

这里我们使用MovieLens 100K的数据,数据下载链接在这
数据传输到/home/hadoop/ml-100k
2打开伪集群

/usr/local/hadoop/sbin/start-all.sh

 /usr/local/spark/sbin/start-all.sh
3、jps看一下,不行还得等一会,可能hadoop处于安全模式,无法操作
使用下命令可以强制离开,建议不要

hadoop dfsadmin -safemode leave
4、运行pyspark,以上所有运行都在hadoop用户下,不要使用root,安装的时候也建议使用hadoop用户
root用户会涉及读写权限
5打开http://vmip:8888/
6进去jupyter平台点击new python3
7依次执行,一起跑会因为数据没准备完,而第二个语句无值,尤其赋值语句,spark需要时间,从后台可以看到的确使用了镜像中的spark,hadoop环境进行运算

user_data= sc.textFile("file:///home/hadoop/ml-100k/u.data")
将u.data文件读入内存
user_data.first()
检验是否成功读
rates = user_data.map(lambda x: x.split("\t")[0:3])
数据是用\t分开的,我们需要将每行的字符串划开,成为数组,并只取前三列,不要时间戳那一列
 rates.first()
得到了评分矩阵数组对应的RDD这些数据都还是字符串,Spark需要的是若干Rating类对应的数组。因此我们现在将RDD的数据类型做转化
from pyspark.mllib.recommendation import Rating
rates_data = rates.map(lambda x: Rating(int(x[0]),int(x[1]),int(x[2])))
 rates_data.first()
数据已经是基于Rating类的RDD了,现在我们终于可以把整理好的数据拿来训练了,代码如下, 我们将矩阵分解的维度设置为20,最大迭代次数设置为5,而正则化系数设置为0.02。在实际应用中,我们需要通过交叉验证来选择合适的矩阵分解维度与正则化系数
    from  pyspark.mllib.recommendation import ALS
from pyspark.mllib.recommendation import MatrixFactorizationModel
sc.setCheckpointDir('checkpoint/')
ALS.checkpointInterval = 2
model = ALS.train(ratings=rates_data, rank=20, iterations=5, lambda_=0.02)
将模型训练完毕后,我们终于可以来做推荐系统的预测
预测用户38对物品20的评分
model.predict(38,20)
预测了用户38最喜欢的10个物品
model.recommendProducts(38,10)
预测下物品20可能最值得推荐的10个用户
model.recommendUsers(20,10)
每个用户最值得推荐的三个物品
 model.recommendProductsForUsers(3).collect()
每个物品最值得被推荐的三个用户
    model.recommendUsersForProducts(3).collect()

 

jupyter中运行Spark推荐算法实例