文章目录
- 课程地址:尚硅谷大数据项目教程(大数据实战电商推荐系统)
- 尚硅谷电商推荐系统的配套资料及虚拟机
链接:https://pan.baidu.com/s/1iSMqV2wPkEfIsO1FrkxRNQ?pwd=1996
提取码:1996 - 1.项目体系架构设计(电商推荐系统)
- 2.工具环境搭建(电商推荐系统)
- 3.创建项目并初始化业务数据(电商推荐系统)
- 4.离线推荐服务建设(电商推荐系统)
- 5.实时推荐服务建设(电商推荐系统)
- 6.冷启动问题处理(电商推荐系统)
- 7.基于内容的相似推荐与基于物品的协同过滤推荐
- 8.尚硅谷电商推荐系统预览
我们的项目主体用Scala
编写,采用IDEA
作为开发环境进行项目编写,采用maven
作为项目构建和管理工具。
一、在IDEA中创建maven项目
打开IDEA
,创建一个maven
项目,命名为ECommerceRecommendSystem
。为了方便后期的联调,我们会把业务系统的代码也添加进来,所以我们可以以ECommerceRecommendSystem
作为父项目,并在其下建一个名为recommender
的子项目,然后再在下面搭建多个子项目用于提供不同的推荐服务。
1.项目框架搭建
在ECommerceRecommendSystem
下新建一个 maven module
作为子项目,命名为recommender
。同样的,再以recommender
为父项目,新建一个maven module
作为子项目。我们的第一步是初始化业务数据,所以子项目命名为 DataLoader
。
父项目只是为了规范化项目结构,方便依赖管理,本身是不需要代码实现的,所以ECommerceRecommendSystem
和recommender
下的src
文件夹都可以删掉。
目前的整体项目框架如下:
2.声明项目中工具的版本信息
我们整个项目需要用到多个工具,它们的不同版本可能会对程序运行造成影响,所以应该在最外层的ECommerceRecommendSystem
中声明所有子项目共用的版本信息。
在pom.xml
中加入以下配置:
ECommerceRecommendSystem/pom.xml
:
<!--定义版本信息-->
<properties>
<!--log4j对日志的具体实现-->
<log4j.version>1.2.17</log4j.version>
<!--slf4j日志的简单接口-->
<slf4j.version>1.7.22</slf4j.version>
<!--mongodb-spark:mongodb与spark的连接器-->
<mongodb-spark.version>2.0.0</mongodb-spark.version>
<!--casbah:mongodb的一个scala上的driver-->
<casbah.version>3.1.1</casbah.version>
<redis.version>2.9.0</redis.version>
<kafka.version>0.10.2.1</kafka.version>
<spark.version>2.1.1</spark.version>
<scala.version>2.11.8</scala.version>
<!--jblas:java的线性代数的库-->
<jblas.version>1.2.1</jblas.version>
</properties>
3.添加项目依赖
首先,对于整个项目而言,应该有同样的日志管理,我们在ECommerceRecommendSystem
中引入公有依赖:
ECommerceRecommendSystem/pom.xml
:
<dependencies>
<!-- 引入共同的日志管理工具 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
同样,对于maven
项目的构建,可以引入公有的插件:
ECommerceRecommendSystem/pom.xml
:
<build>
<!--声明并引入子项目共有的插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<!--所有的编译用JDK1.8-->
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--maven的打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!--该插件用于将scala代码编译成class文件-->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
<executions>
<!--绑定到maven的编译阶段-->
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
然后,在recommender
模块中,我们可以为所有的推荐模块声明spark
相关依赖(这里的dependencyManagement
表示仅声明相关信息,子项目如果依赖需要自行引入):
ECommerceRecommendSystem/recommender/pom.xml
:
<dependencyManagement>
<dependencies>
<!-- 引入Spark相关的Jar包 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId