06-推荐引擎

在docker中安装numpy

命令:apk add py3-numpy

更改pyspark的python版本,根据02的描述

其他人提供的一种方法:

1.docker exec -it spark-master /bin/sh

2.echo  http://mirrors.aliyun.com/alpine/v3.7/main/ >> /etc/apk/repositories   #配置阿里镜像源

3.apk update                                                                                                       #查看是否成功

4.docker exec -it spark-master bash

5.apk add py3-numpy                                                                                          #安装numpy库

6.进入bash5.0#后,再export PYSPARK_PYTHON=python3                               #调用python3,(每次使用都需要执行此命令)

7.再./spark/bin/pyspark

至此调用numpy不再报错
  1. 上传加载数据
上传本地:
docker cp E:/1-研究生/01-课程/大数据分析应用与实践/pyspark推荐引擎/ml-100k.zip a89262625a0a:/spark/data
  1. 在/spark/data目录下解压数据
unzip ml-100k.zip
  1. 我们使用sc.textFile读取ml-100k
我们使用sc.textFile读取HDFS上的ml-100k数据集中的u.data,并且查看数据项数
rawUserData = sc.textFile("hdfs://127.0.0.1:9000/ml-100k/u.data")  

如果文件在本地:
rawUserData = sc.textFile("file:///spark/data/ml-100k/u.data")

查看数据项:
rawUserData.count()  // 结果显示100000说明对了
  1. 查看u.data第一项数据
rawUserData.first()
结果:
'196\t242\t3\t881250949'

以上4个字段分别是:用户id、项目id、评分、日期时间,\t为分隔符。
  1. 导入Rating模块
from pyspark.mllib.recommendation import Rating
  1. 读取rawUserData前三个字段,按照用户、产品、用户对此产品的评价来编写rawRatings
rawRatings = rawUserData.map(lambda line:line.split("\t")[:3]) 
查看前5条
rawRatings.take(5) 

下面开始准备ALS训练数据集

  1. ALS训练数据格式是RatingRDD数据类型,Rating定义如下:
字段说明
user用户
product产品
rating用户对此产品的评价
  1. 编写ratingsRDD
ratingsRDD = rawRatings.map(lambda x:(x[0],x[1],x[2]))  
ratingsRDD.take(5)  

  1. 查看ratingsRDD项数
numRatings = ratingsRDD.count()  
numRatings  共有100000项评价
  1. 查看不重复用户数
x[0]是用户字段,可以先用.map(lambda x:x[0])转换为用户数据,再使用.distinct()筛选出不重复的数据,最后显示numUsers

numUsers = ratingsRDD.map(lambda x:x[0]).distinct().count()  
numUsers 
  1. 查看不重复电影数

x[1]是电影字段,可以先使用.map(lambda x:x[1])转换为电影数据,再使用.distinct()筛选出不重复的数据

numMovies = ratingsRDD.map(lambda x:x[1]).distinct().count() 

numMovies
  1. 导入ALS模块
from pyspark.mllib.recommendation import ALS  
  1. 使用ALS.train介绍
  • 我们将使用ALS.train命令进行训练。ALS.train可分为显式评分与隐式评分训练。
  • 显式评分(Explicit Rating)训练
ALS.train(ratings,rank,iterations=5,lambda_=0.01):
返回:MatrixFactorizationModel

  • 隐式评分(Implicit Rating)训练
ALS.trainImplicit(ratings,rank,iterations=5,lambda_=0.01):
返回:MatrixFactorizationModel

运行代码:

model = ALS.train(ratingsRDD,10,10,0.01)

print(model) 

model.recommendProducts(100,5)  

model.predict(100,1141) 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值