如何从零起步,用Spark打造一个高效电影推荐系统?

2026-05-20 21:573阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐
从零开发,如何基于 Spark 构建一个电影推荐系统

在之前的一篇二十行代码!我用Spark实现了电影推荐算法文章中, 写了如何使用spark的ALS,去做一个电影推荐模型,其中使用的电影评分数据是1000多条Spark的样例数据。在文章的末尾我也提到, 如果想要做一个电影推荐系统,除了电影推荐模型数据,一边也要创建一个前后端的展示系统,在数据库中将电影ID与电影名称或者电影类型对应起来这样才能实现一个完整的推荐系统展示,好吧好吧...。

在上面提到的那篇文章, 就是在创作营s9写的,本来想趁热打铁写完这篇文章,然后上面的前言部分已经写完了然后就一直拖延到到现在快一年过去了已经到了s14赛季了所以就打算在项目实战的赛道,实现电影推荐系统和完成这篇文章的创作,乱弹琴。。

上面也提到了 之前使用的是1000多条 spark 官网提供的样例数据,所以为了验证模型的准确性,我就找到了一个电影推荐系统的数据集 MovieLens,客观地说...。

MovieLens 电影推荐数据其中包含了四个文件:movies、 何苦呢? ratings、tags、links。

| 文件名 | 内容描述 | | -------- | -------------------------------------- | | movies | 包含电影 ID 和名称的映射表 | | ratings | 用户评分数据 | | tags | 用户与电影类型偏好关系标签 | | links | movieId 与其他数据库 ID 的对应关系 |

moveis共87586条数据, 其中包含了2000部以上的电影信息;ratings是用户评分数据, 和spark给出的样例数据是一样的格式, 包含userId、movieId和rating评分字段,只不过和之前的1500条数据相比, 这里有3000w条评分数据。tags文件中共四列数据, 分别是:userId、movieId、tag、timestap。而links文件对于我这个电影推荐系统来说没有什么意义, 里面数据就是movieId对应各种数据库中的ID。其中, IMDB是互联网电影资料库, 娱乐B 是一个用户贡献的电影数据库,给力。。

上面就是MovieLens包含的四种数据, 其中ratings直接使用spark的ALS训练生成推荐模型, movies和tags文件就存入数据库中。其中movies主要是用来在前台展示。

在上面四个文件中, 我们将 movies 和 tags 这两部分数据存储在 MySQL 中, 那为什么要存储这两部分数据呢? ALS生成的推荐模型数据是这样的:用户1喜欢电影2, 用户2喜欢电影3。 格局小了。 那么电影2和3到底是哪部电影呢, 这时候从moveis表里根据2、3这个ID就能获取到电影名称, 展示在前台页面页面上。

而tags表主要是用来表示用户和电影类型偏好的关系, 通过userId和movieId与ratings关联, 可以帮助分析出来映画的特征和用户的偏好。 痛并快乐着。 这些标签可以用于映画推薦準確性驗證、用户偏好分析 , 以及改进映画分类和搜索功能。

所以就在数据库中创建movies和tags两个表:,可以。

create table movies not null primary key,title varchar not null,genres text);create table tags default '',movieId varchar default '',tag text,timestamp varchar default '');

LOAD DATA INFILE '/var/lib/mysql-files/ml-32m/' INTO TABLE movies FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 1 ROWS ;LOAD DATA INFILE '/var/lib/mysql-files/ml-32m/' INTO TABLE tags FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 1 ROWS ;
def main: Unit = { val spark = SparkSession.builder.appName.master.getOrCreate import org.apache.spark.sql._ import org.apache.spark.sql.functions._ // 读取评分数据 val ratings = spark.read .option .option .csv //划分训练集与测试集 val = ratings splitDataFrame), Array) // Create training and test DataFrames by splitting dataframe into train and test sets using a fixed ratio of user to movie interactions; // val als = new ALS // .setMaxIter // Set maximum number of iterations // .setRegParam // Set regularization parameter val model = als // setMinGamma, setSharedMemSize, setUserCol, setItemCol, setRatingCol, etc., all options can be tuned // Model Training model fit trainingDataFrames_ // Evaluate Model val evaluation = model evaluate testDataFrames_ val rmse = evaluation sqrtMeanError println // 获取每个用户的 Top N 个热门影片 val userRecs = ... }

关键技术栈

Spark ALS

  • 使用 Spark MLlib 的 ALS 算法进行模型训练
  • 处理大规模数据集

薅羊毛。 MySQL存储 movie 表中的信息存储 tag 表中的用户偏好 前端展示根据后端返回的后来啊动态生成用户友好的界面

优化方向

从零开发,如何基于 Spark 构建一个电影推荐系统

在之前的一篇二十行代码!我用Spark实现了电影推荐算法文章中, 写了如何使用spark的ALS,去做一个电影推荐模型,其中使用的电影评分数据是1000多条Spark的样例数据。在文章的末尾我也提到, 如果想要做一个电影推荐系统,除了电影推荐模型数据,一边也要创建一个前后端的展示系统,在数据库中将电影ID与电影名称或者电影类型对应起来这样才能实现一个完整的推荐系统展示,好吧好吧...。

在上面提到的那篇文章, 就是在创作营s9写的,本来想趁热打铁写完这篇文章,然后上面的前言部分已经写完了然后就一直拖延到到现在快一年过去了已经到了s14赛季了所以就打算在项目实战的赛道,实现电影推荐系统和完成这篇文章的创作,乱弹琴。。

上面也提到了 之前使用的是1000多条 spark 官网提供的样例数据,所以为了验证模型的准确性,我就找到了一个电影推荐系统的数据集 MovieLens,客观地说...。

MovieLens 电影推荐数据其中包含了四个文件:movies、 何苦呢? ratings、tags、links。

| 文件名 | 内容描述 | | -------- | -------------------------------------- | | movies | 包含电影 ID 和名称的映射表 | | ratings | 用户评分数据 | | tags | 用户与电影类型偏好关系标签 | | links | movieId 与其他数据库 ID 的对应关系 |

moveis共87586条数据, 其中包含了2000部以上的电影信息;ratings是用户评分数据, 和spark给出的样例数据是一样的格式, 包含userId、movieId和rating评分字段,只不过和之前的1500条数据相比, 这里有3000w条评分数据。tags文件中共四列数据, 分别是:userId、movieId、tag、timestap。而links文件对于我这个电影推荐系统来说没有什么意义, 里面数据就是movieId对应各种数据库中的ID。其中, IMDB是互联网电影资料库, 娱乐B 是一个用户贡献的电影数据库,给力。。

上面就是MovieLens包含的四种数据, 其中ratings直接使用spark的ALS训练生成推荐模型, movies和tags文件就存入数据库中。其中movies主要是用来在前台展示。

在上面四个文件中, 我们将 movies 和 tags 这两部分数据存储在 MySQL 中, 那为什么要存储这两部分数据呢? ALS生成的推荐模型数据是这样的:用户1喜欢电影2, 用户2喜欢电影3。 格局小了。 那么电影2和3到底是哪部电影呢, 这时候从moveis表里根据2、3这个ID就能获取到电影名称, 展示在前台页面页面上。

而tags表主要是用来表示用户和电影类型偏好的关系, 通过userId和movieId与ratings关联, 可以帮助分析出来映画的特征和用户的偏好。 痛并快乐着。 这些标签可以用于映画推薦準確性驗證、用户偏好分析 , 以及改进映画分类和搜索功能。

所以就在数据库中创建movies和tags两个表:,可以。

create table movies not null primary key,title varchar not null,genres text);create table tags default '',movieId varchar default '',tag text,timestamp varchar default '');

LOAD DATA INFILE '/var/lib/mysql-files/ml-32m/' INTO TABLE movies FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 1 ROWS ;LOAD DATA INFILE '/var/lib/mysql-files/ml-32m/' INTO TABLE tags FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 1 ROWS ;
def main: Unit = { val spark = SparkSession.builder.appName.master.getOrCreate import org.apache.spark.sql._ import org.apache.spark.sql.functions._ // 读取评分数据 val ratings = spark.read .option .option .csv //划分训练集与测试集 val = ratings splitDataFrame), Array) // Create training and test DataFrames by splitting dataframe into train and test sets using a fixed ratio of user to movie interactions; // val als = new ALS // .setMaxIter // Set maximum number of iterations // .setRegParam // Set regularization parameter val model = als // setMinGamma, setSharedMemSize, setUserCol, setItemCol, setRatingCol, etc., all options can be tuned // Model Training model fit trainingDataFrames_ // Evaluate Model val evaluation = model evaluate testDataFrames_ val rmse = evaluation sqrtMeanError println // 获取每个用户的 Top N 个热门影片 val userRecs = ... }

关键技术栈

Spark ALS

  • 使用 Spark MLlib 的 ALS 算法进行模型训练
  • 处理大规模数据集

薅羊毛。 MySQL存储 movie 表中的信息存储 tag 表中的用户偏好 前端展示根据后端返回的后来啊动态生成用户友好的界面

优化方向