在《推荐系统》中,详细的介绍了常用的推荐系统,大家基本上对推荐系统有了一个认识。这里我就简单的讲述一下基于spark的推荐系统。
spark有着处理速度快,容易使用,而且可以和很多数据库融合的优势,所以在大数据分析中经常使用。具体的介绍我就不在这里赘述了,有兴趣的童鞋可以去看看《Spark快速大数据分析》,这本书详细的介绍了spark的基础知识和使用方法,是我学过spark中讲解最清晰和最容易入门的书籍,下面我们就开始推荐系统的介绍了。
下面使用的是MovieLens数据集,由于是个人练习,我使用的是 1M 数据集 ml-latest-small.zip 。spark 版本为 2.4.0。
创建spark对象
import findspark
findspark.init("/opt/spark", edit_rc=True)
from pyspark import SparkContext
sc = SparkContext("local", "john-spark")
findspark 引入 pyspark 依赖,/opt/spark 为我的 spark 安装路径。
local: 本地运行
john-spark:应用名
数据准备
- 导入数据
text = sc.textFile("./data/ml-latest-small/ratings.csv")
text = text .filter(lambda x: "movieId" not in x) # 去除标题行
导入数据,我们也可以熟悉一下数据:
text.count() # 查看数据数量
text.take(5) # 查看前5条数据
数据格式为:
['1,1,4.0,964982703',
'1,3,4.0,964981247',
'1,6,4.0,964982224',
'1,47,5.0,964983815',
'1,50,5.0,964982931']
- 数据处理
spark主要有四种数据类型:Vector(向量),LabeledPoint(数据点,主要用在分类回归这些算法中)、Rating(评分,用于推荐)、model(模型,训练结果)。我们这里使用的是Rating,Rating定义如下:
R a t i n g ( u s e r , p r o d u c t , p r o d u c t ) Rating(user, product, product) Rating(user,product,product)
所以我们这里只需要使用前三列:userId,movieId,rating。
movieRatings = text.map(lambda x: x.split(",")[:3]) # 取出前三列
movieRatings.take(5)
不熟悉命令的可以查看《spark快速大数据分析》第四章:RDD 编程。取出来的结果如下所示:
[['1', '1', '4.0'],
['1', '3', '4.0'],
['1', '6'