pyspark运行ALS推荐算法

PySpark实现ALS推荐算法 @PySpark 实现ALS推荐算法 spark-submit movie_rec.py from pyspark import SparkConf, SparkContext from pyspark.mllib.recommendation import ALS, Rating from math import sqrt 获取所有movie名称和id对应集合 def movie_dict(f... 阅读详情

首先创建读取路径,这个取决于你的pyspark是以什么方式启动的

global Path
if sc.master[0:5] == 'local':
    Path='file:/home/swt/pythonwork/PythonProject/'
else:
    Path="hdfs://ubuntu:9000/user/swt/"

我是本地启动

sc.master
'local[*]'

开始读取数据

rawUserData = sc.textFile(Path+"data/u.data")
rawUserData.count()
rawUserData.first()
rawRatings = rawUserData.map(lambda line:line.split("\t")[:3])
rawRatings.take(5)
ratingsRDD = rawRatings.map(lambda x:(x[0],x[1],x[2]))
ratingsRDD.take(5)
100000
'196\t242\t3\t881250949'
[['196', '242', '3'],
 ['186', '302', '3'],
 ['22', '377', '1'],
 ['244', '51', '2'],
 ['166', '346', '1']]
[('196', '242', '3'),
 ('186', '302', '3'),
 ('22', '377', '1'),
 ('244', '51', '2'),
 ('166', '346', '1')]
# 对数据进行处理
numRatings=ratingsRDD.count()
numRatings
numUsers = ratingsRDD.map(lambda x:x[0]).distinct().count()
numUsers
numMovles = ratingsRDD.map(lambda x:x[1]).distinct().count()
numMovles
100000
943
1682
# 将处理好的数据进行训练,ALS算法返回的是一个model
from pyspark.mllib.recommendation import ALS
model = ALS.train(ratingsRDD, 10, 10, 0.01)
print(model)
<pyspark.mllib.recommendation.MatrixFactorizationModel object at 0x7fb87179b908>

# 用户id为100的用户推荐以下电影和推荐指数
model.recommendProducts(100,5)
[Rating(user=100, product=1160, rating=7.146604192513291),
 Rating(user=100, product=1631, rating=6.491199349189874),
 Rating(user=100, product=253, rating=6.4363095037441145),
 Rating(user=100, product=904, rating=6.310990410281013),
 Rating(user=100, product=1097, rating=5.990350261674924)]
# 电影id为200的推荐给以下用户和推荐指数
model.recommendUsers(200,5)
[Rating(user=762, product=200, rating=6.990901173944179),
 Rating(user=55, product=200, rating=6.828390321151252),
 Rating(user=581, product=200, rating=6.131202021531233),
 Rating(user=888, product=200, rating=6.026787459201902),
 Rating(user=818, product=200, rating=5.947695724505568)]
# 读取电影名
itemRDD = sc.textFile(Path+"data/u.item")
itemRDD.count()
moiveTitle = itemRDD.map(lambda line:line.split("|")).map(lambda a:(float(a[0]),a[1])).collectAsMap()
len(moiveTitle)
list(moiveTitle.items())[:5]
1682
1682
[(1.0, 'Toy Story (1995)'),
 (2.0, 'GoldenEye (1995)'),
 (3.0, 'Four Rooms (1995)'),
 (4.0, 'Get Shorty (1995)'),
 (5.0, 'Copycat (1995)')]
recommendP = model.recommendProducts(100,5)
for p in recommendP:
    print("对用户"+str(p[0])+" 推荐电影 "+str(moiveTitle[p[1]])+" 推荐评分为: "+str(p[2]))
recommendP = model.recommendProducts(100,5)

for p in recommendP:

    print("对用户"+str(p[0])+" 推荐电影 "+str(moiveTitle[p[1]])+" 推荐评分为: "+str(p[2]))

对用户100 推荐电影 Love! Valour! Compassion! (1997) 推荐评分为: 7.146604192513291
对用户100 推荐电影 Slingshot, The (1993) 推荐评分为: 6.491199349189874
对用户100 推荐电影 Pillow Book, The (1995) 推荐评分为: 6.4363095037441145
对用户100 推荐电影 Ma vie en rose (My Life in Pink) (1997) 推荐评分为: 6.310990410281013
对用户100 推荐电影 Hate (Haine, La) (1995) 推荐评分为: 5.990350261674924

model.save(sc,Path+'ALSmodel')

在这里保存模型的时候报了错误,我现在还不知道是啥原因

Py4JJavaError                             Traceback (most recent call last)
<ipython-input-22-24dc419c2741> in <module>()
----> 1 model.save(sc,Path+'ALSmodel')

/usr/local/spark/python/pyspark/mllib/util.py in save(self, sc, path)
    404         if not isinstance(path, basestring):
    405             raise TypeError("path should be a basestring, got type %s" % type(path))
--> 406         self._java_model.save(sc._jsc.sc(), path)
    407 
    408 

/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py in __call__(self, *args)
   1131         answer = self.gateway_client.send_command(command)
   1132         return_value = get_return_value(
-> 1133             answer, self.gateway_client, self.target_id, self.name)
   1134 
   1135         for temp_arg in temp_args:

/usr/local/spark/python/pyspark/sql/utils.py in deco(*a, **kw)
     61     def deco(*a, **kw):
     62         try:
---> 63             return f(*a, **kw)
     64         except py4j.protocol.Py4JJavaError as e:
     65             s = e.java_exception.toString()

/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py in get_return_value(answer, gateway_client, target_id, name)
    317                 raise Py4JJavaError(
    318                     "An error occurred while calling {0}{1}{2}.\n".
--> 319                     format(target_id, ".", name), value)
    320             else:
    321                 raise Py4JError(

Py4JJavaError: An error occurred while calling o138.save.
: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/home/swt/pythonwork/PythonProject/ALSmodel/metadata already exists
	at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:131)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1.apply$mcV$sp(PairRDDFunctions.scala:1191)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1.apply(PairRDDFunctions.scala:1168)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1.apply(PairRDDFunctions.scala:1168)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
	at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
	at org.apache.spark.rdd.PairRDDFunctions.saveAsHadoopDataset(PairRDDFunctions.scala:1168)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopFile$4.apply$mcV$sp(PairRDDFunctions.scala:1071)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopFile$4.apply(PairRDDFunctions.scala:1037)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopFile$4.apply(PairRDDFunctions.scala:1037)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
	at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
	at org.apache.spark.rdd.PairRDDFunctions.saveAsHadoopFile(PairRDDFunctions.scala:1037)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopFile$1.apply$mcV$sp(PairRDDFunctions.scala:963)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopFile$1.apply(PairRDDFunctions.scala:963)
	at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopFile$1.apply(PairRDDFunctions.scala:963)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
	at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
	at org.apache.spark.rdd.PairRDDFunctions.saveAsHadoopFile(PairRDDFunctions.scala:962)
	at org.apache.spark.rdd.RDD$$anonfun$saveAsTextFile$1.apply$mcV$sp(RDD.scala:1489)
	at org.apache.spark.rdd.RDD$$anonfun$saveAsTextFile$1.apply(RDD.scala:1468)
	at org.apache.spark.rdd.RDD$$anonfun$saveAsTextFile$1.apply(RDD.scala:1468)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
	at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
	at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
	at org.apache.spark.rdd.RDD.saveAsTextFile(RDD.scala:1468)
	at org.apache.spark.mllib.recommendation.MatrixFactorizationModel$SaveLoadV1_0$.save(MatrixFactorizationModel.scala:361)
	at org.apache.spark.mllib.recommendation.MatrixFactorizationModel.save(MatrixFactorizationModel.scala:206)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
	at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
	at py4j.Gateway.invoke(Gateway.java:280)
	at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
	at py4j.commands.CallCommand.execute(CallCommand.java:79)
	at py4j.GatewayConnection.run(GatewayConnection.java:214)
	at java.lang.Thread.run(Thread.java:748)

基于PySpark和ALS算法实现基本的电影推荐流程 本文介绍了PySpark的基本原理和常用算子。第一部分通过Py4J库实现Python与Java交互,解释了PySpark的工作原理。第二部分详细列举了PySpark的核心算子,包括数据读取、转换(map、filter、flatMap等)和行动操作(collect等),并附有代码示例。此外,还介绍了键值对RDD的处理方法(如mapValues、subtractByKey等)。这些内容为大数据实时分析项目提供了基础入门知识。 阅读详情

相关推荐

pyspark案例系列11-ALS推荐算法

spark ALS算法 推荐算法

只是甲的博客 1499

【推荐算法】协同过滤算法代码(pyspark | ALS)

【推荐算法】协同过滤算法代码。基于pyspark ALS 的代码实现

u011590738的博客 8887

Spark---ALS推荐算法

Spark——ALS推荐算法推荐算法介绍协同过滤式推荐的优缺点ALS推荐算法的介绍用户对产品项目的评分稀疏矩阵(Sparse Matrix)的问题矩阵分解(Matrix Factorization)数据下载环境说明在IPython Notebook中运行推荐程序首先启动所有虚拟机并启动Hadoop集群Cluster切换至IPython Notebook工作目录并在Hadoop YARN-clien...

Tubby的博客 6139

协同过滤pyspark.mllib.ALS算法代码(一个例子)

原理在上一个帖子里https://blog.csdn.net/a8131357leo/article/details/100625257 训练模型 from pyspark.mllib.recommendation import ALS from pyspark.conf import SparkConf from pyspark.context import SparkContext...

a8131357leo的博客 2118

基于Python Spark的推荐系统

ALS推荐算法 Spark MLlib中实现了ALS(Alternating Least Squares)基于协同过滤的推荐算法。 MovieLens数据集 MovieLens数据集收集了大量用户对不同电影的评分,详情见数据集官网http://grouplens.org/datasets/movielens。 下载ml-100k数据至工作目录中,终端输入命令: mkdir -p ...

SanFancsgo的博客 1万+

als算法参数_Pyspark推荐算法实战(一)

作者:丁永兵作者简介:NLP、推荐算法1. 前言由于最近转向商品推荐的工作,因此从本文起,开始介绍一些利用pyspark在推荐算法中的具体应用。目前最新版本的spark已经出到2.4.5,我们主要使用的还是2.3版本,所以后续涉及代码开发,全部基于2.3.4版本。首先看下pyspark的算法包内容,pyspark算法包主要有ml和mllib两个库,这两个库从图一看到,整体内容基本一致,都...

weixin_33238239的博客 1817

基于Spark的协同过滤音乐推荐(python源码分析)

因为要进行大数据场景下利用Spark做音乐推荐,所以记录一下学习Spark的过程和实验过程。 目录一 对Spark整体上的认识二 spark mllib recommendation三 本文实验代码 一 对Spark整体上的认识 Spark是一个分布式计算引擎,将大量的计算任务分发到计算结点,实现分布式计算,和hadoop不同的是,Spark计算的中间结果存储在内存中,所以同等配置机器情况下,...

明月几时有,把酒问青天 4373

基于PySpark的电影推荐引擎

相关知识 推荐引擎是最常见的机器学习应用,我们可以在各大购物网站上看见这方面的应用。 Spark MLlib支持ALS(Alternating Least Squares)推荐算法,是机器学习的协同过滤推荐算法。机器学习的协同过滤推荐算法通过观察所有用户给产品的评价来推断每个用户的喜好,并向每个用户分别推荐多个合适的产品,也可以把某个产品推荐给多个用户。 系统环境 Linux Centos7 P...

普通Gopher 2234

Eclipse 保存电影推荐模型时,发生异常 Exception in thread “dag-scheduler-event-loop“ java.lang.StackOverflowError

发现问题 在 Eclipse 运行 ALS 算法进行电影推荐模型时,保存模型 model.save(sc,Path+"ALSmodel")时,发生报错 Exception in thread "dag-scheduler-event-loop" java.lang.StackOverflowError,经在网上搜索,找到如下解决方法。 解决方法 一、环境配置 (1)Linux 系统:VirtualBox 6.1.14, Ubuntu 16.04 (2)hadoop 2.7.1 (3)pyspark 2.

weixin_44711529的博客 1069

ALS推荐算法理解及Spark编程实现

前言ALS(alternating least squares)是交替最小二乘的简称,在机器学习上下文中特指基于交替最小二乘求解的协同过滤推荐算法。Spark1.3版本的MLlib库中增加了对ALS算法的支持,因此,在实际项目中可通过Spark的MLlib库调用ALS算法实现协同过滤推荐。ALS的基本原理ALS属于SVD++算法中的一种,其理论基础源于SVD(奇异值分解),即任何一个矩阵均可分解成两

zylove2010的博客 2691

PySpark-推荐系统-RecommenderSystem

书籍<<Python在大数据平台的应用>> 更多信息请关注本书附书代码:附书代码Github工程:https://github.com/Shadow-Hunter-X 推荐系统 自动推荐内容或产品以个性化的方式向适当的用户提供,以增强整体体验。推荐系统在术语上非常强大使用海量的数据,学会理解偏好。 对于PySpark中的“推荐系统”模块 pyspark.ml.recomme...

just C/C++ 1549

大数据-270 Spark MLib-机器学习库快速入门(分类/回归/聚类/推荐)

Spark MLlib 是 Apache Spark 的机器学习库,2026年最新版本支持分布式机器学习算法训练。本文介绍 Spark MLlib 环境配置、pyspark 编程基础,以及分类算法(决策树、SVM、朴素贝叶斯、逻辑回归、随机森林、梯度提升树)、回归算法(线性回归、决策树回归、随机森林回归、GBT回归)、聚类算法(KMeans、BisectingKMeans、GaussianMixture、LDA)和推荐算法(ALS协同过滤、关联规则)的实战代码。适用于 Spark 3.x+、Python 3

谢谢你的喜欢 我们一起无限进步 7514

基于Spark MLlib实现商品推荐系统中的协同过滤算法——从原理到实战

在当今数据驱动的电商环境中,个性化推荐系统已成为提升用户体验和平台转化率的核心引擎。协同过滤(Collaborative Filtering)作为推荐系统中最经典且应用最广泛的算法之一,能够通过挖掘用户-物品交互矩阵中的隐含模式,实现精准的个性化推荐。然而,随着用户规模和商品数量的爆炸式增长,传统单机实现面临内存溢出和计算时间过长等瓶颈。Apache Spark作为分布式计算框架,其MLlib库提供了高效的协同过滤算法实现,能够在大规模集群上线性扩展。

2201_76125261的博客 18

从头开始构建Book Recommender引擎并将其部署到Web应用程序

Recommendation systems, whether we like them or not, are infiltrating every aspect of our lives. From the queue of shows and movies underneath the “Because you watched” header on your Netflix profile,...

weixin_26752765的博客 549

7. PySpark推荐模型简明教程

本案例包含两个数据集:评分表ratings.csv和电影表movies.csv。数据集ratings有100836条记录,部分数据如下:userId:用户ID号。movieId:电影ID号。rating:用户对电影的评分。timestamp:时间戳,评分时间。数据集movies有9742条记录,部分数据如下:movieId:电影ID号。title:电影名称。genres:电影类型,如动作片,喜剧片 ,恐怖片等。

chendengyi2的博客 1635

高分六号GF-6 WFV数据处理全流程:从原始数据解压到经纬度投影转换

本文详细解析了高分六号GF-6 WFV遥感数据的完整处理流程。从原始数据解压与分块结构理解入手,指导如何安装ENVI国产卫星支持工具进行自动拼接,并重点阐述了利用RPC模型进行正射校正以消除几何畸变,以及将UTM投影转换为地理经纬度坐标的关键步骤。文章旨在帮助用户高效地将原始卫星数据转化为可直接用于农业监测、生态环境分析等领域的标准地理空间图像。

weixin_29047919的博客 196

基于pyspark的als推荐电影

ALS推荐算法: ALS算法是基于模型的推荐算法 基本思想 对稀疏矩阵进行模型分解,评估出缺失项的值,以此来得到一个基本的训练模型。然后依照此模型可以针对新的用户和物品数据进行评估。ALS是采用交替的最小二乘法来算出缺失项的,交替的最小二乘法是在最小二乘法的基础上发展而来的。 从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混合CF,它同时考虑了User和Item两个方面。 矩...

xhaoDream的博客 3810

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2122

pyspark ALS 简单总结

Pyspark 常见数据清洗和补全指令: Dataframe   Df.select() 选取某列 Df.fillna(0) 用0补全所有na位 Df.filter(cond.)=Df.where(cond.) 按照cond.过滤df,相当于...

大龄转行程序媛的博客 2774

软考高级系统架构设计师系列论文四十九:论微服务架构及其应用

软考高级系统架构设计师系列论文四十九:论微服务架构及其应用

zhengzaifeidelushang的博客 3194

Android 12 大屏时底下显示任务栏以及虚拟按键靠右问题

Android 12 点大屏时,底下导航栏变成显示任务栏,虚拟按键靠右的分析以及修改

Android系统开发笔记 4686

als pyspark_带有ALS的PySpark协同过滤

als pysparkRecommender System is an information filtering tool that seeks to predict which product a user will like, and based on that, recommends a few products to the users. For example, Amazon can ...

weixin_26713521的博客 1120

点云去噪:基于点云拟合的方法

点云处理是计算机视觉中的重要任务之一,而点云去噪是点云处理的关键步骤之一。在实际应用中,由于采集设备的噪声、运动估计误差或者环境干扰等因素,点云数据中常常包含有噪声点,这些噪声点会对后续的点云分析和处理造成不良影响。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。一种简单的方法是计算点到拟合曲面的距离,并将距离超过某个阈值的点定义为噪声点,进行过滤。该方法通过拟合点云数据的曲面模型,对噪声点进行识别和过滤,从而得到更加干净的点云数据。

AuSwift的博客 638
上一篇: pyspark RDD基本操作
下一篇: pyspark之二分类决策树算法
pyswt
博客等级 码龄8年 45粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值