10-使用pipeline和不使用pipeline来分别实现推荐系统 pyspark

首先不使用pipeline实现模型的训练

from pyspark.mllib.recommendation import Rating  # Rating模块
from pyspark.mllib.recommendation import ALS     # ALS模块


# 读取文件 u.data
# 数据字段分别为:用户id,项目id,评分,日期,并以\t作为分隔符
data_path = '../测试数据/spark/ml-100k/u.data'
raw_user_data = sc.textFile(data_path)

# 参看数据项,检查是否读取成功
print(raw_user_data.count())

# 读取rawUserData前三个字段,按照用户、产品、用户对此产品的评价来编写rawRatings
raw_ratings = raw_user_data.map(lambda line: line.split('\t')[:3])
# 查看前5项,检查是否映射成功
print(raw_ratings.take(5))

# 准备ALS训练数据集
# 转换为RDD格式[] 变为()
ratings_RDD = raw_ratings.map(lambda x:(x[0], x[1], x[2]))
print(ratings_RDD.take(5)) 

# 训练模型
model = ALS.train(ratings_RDD, 10, 10, 0.01)
print(model)


# 然后使用该模型进行推荐,使用model.recommendProducts方法来推荐
# 向用户100推荐他可能感兴趣的前5部电影,传入参数,
# 注:每次训练结果课可能都不相同
print(model.recommendProducts(100, 5))

# 查看针对用户推荐产品的评分
# 例如:系统针对用户100推荐产品1141的评分
print(model.predict(100, 1141))
print(type(model))

# 针对电影推荐用户
# 推荐对电影200感兴趣的前5个用户
print(model.recommendUsers(product=200, num=5))



# 显示推荐的电影名称 使用文件 u.item
item_path = '../测试数据/spark/ml-100k/u.item'
item_RDD = sc.textFile(item_path)
print(item_RDD.count())


# 为了显式推荐电影的名称,创建“电影ID与名称”的字典
movie_title = item_RDD.map(lambda line:line.split("|")).map(lambda a:(float(a[0]),a[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值