大数据项目离线推荐服务建设

发布时间:2021年12月17日作者:atguigu浏览次数:143

1 离线推荐服务

离线推荐服务是综合用户所有的历史数据,利用设定的离线统计算法和离线推荐算法周期性的进行结果统计与保存,计算的结果在一定时间周期内是固定不变的,变更的频率取决于算法调度的频率。

离线推荐服务主要计算一些可以预先进行统计和计算的指标,为实时计算和前端业务相应提供数据支撑。

离线推荐服务主要分为统计性算法、基于ALS的协同过滤推荐算法以及基于ElasticSearch的内容推荐算法。

大数据时代

在recommender下新建子项目StatisticsRecommender,pom.xml文件中只需引入spark、scala和mongodb的相关依赖:

<dependencies>
    <!– Spark的依赖引入 –>
   
<dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
    </dependency>
    <!– 引入Scala –>
   
<dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
    </dependency>
    <!– 加入MongoDB的驱动 –>
    <!–
用于代码方式连接MongoDB –>
   
<dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>casbah-core_2.11</artifactId>
        <version>${casbah.version}</version>
    </dependency>
    <!– 用于SparkMongoDB的对接 –>
   
<dependency>
        <groupId>org.mongodb.spark</groupId>
        <artifactId>mongo-spark-connector_2.11</artifactId>
        <version>${mongodb-spark.version}</version>
    </dependency>
</dependencies>

在resources文件夹下引入log4j.properties,然后在src/main/scala下新建scala 单例对象com.atguigu.statistics.StatisticsRecommender。

同样,我们应该先建好样例类,在main()方法中定义配置、创建SparkSession并加载数据,最后关闭spark。代码如下:

src/main/scala/com.atguigu.statistics/StatisticsRecommender.scala

case class Movie(mid: Int, name: String, descri: String, timelong: String, issue: String, shoot: String, language: String, genres: String, actors: String, directors: String)

case class Rating(uid: Int, mid: Int, score: Double, timestamp: Int)

case class MongoConfig(uri:String, db:String)

case class Recommendation(mid:Int, score:Double)
case class GenresRecommendation(genres:String, recs:Seq[Recommendation])

object StatisticsRecommender {

  val MONGODB_RATING_COLLECTION = “Rating”
 
val MONGODB_MOVIE_COLLECTION = “Movie”

  //统计的表的名称
 
val RATE_MORE_MOVIES = “RateMoreMovies”
 
val RATE_MORE_RECENTLY_MOVIES = “RateMoreRecentlyMovies”
 
val AVERAGE_MOVIES = “AverageMovies”
 
val GENRES_TOP_MOVIES = “GenresTopMovies”

  // 入口方法
 
def main(args: Array[String]): Unit = {

    val config = Map(
      “spark.cores” -> “local[*]”,
      “mongo.uri” -> “mongodb://localhost:27017/recommender”,
      “mongo.db” -> “recommender”
   
)

    //创建SparkConf配置
   
val sparkConf = new SparkConf().setAppName(“StatisticsRecommender”).setMaster(config(“spark.cores”))
    //创建SparkSession
   
val spark = SparkSession.builder().config(sparkConf).getOrCreate()

    val mongoConfig = MongoConfig(config(“mongo.uri”),config(“mongo.db”))

    //加入隐式转换
   
import spark.implicits._

    //数据加载进来
   
val ratingDF = spark
      .read
      .option(“uri”,mongoConfig.uri)
      .option(“collection”,MONGODB_RATING_COLLECTION)
      .format(“com.mongodb.spark.sql”)
      .load()
      .as[Rating]
      .toDF()

    val movieDF = spark
      .read
      .option(“uri”,mongoConfig.uri)
      .option(“collection”,MONGODB_MOVIE_COLLECTION)
      .format(“com.mongodb.spark.sql”)
      .load()
      .as[Movie]
      .toDF()

    //创建一张名叫ratings的表
   
ratingDF.createOrReplaceTempView(“ratings”)

 

//TODO: 不同的统计推荐结果

 

spark.stop()

}

想要了解跟多关于大数据培训课程内容欢迎关注尚硅谷大数据培训,尚硅谷除了这些技术文章外还有免费的高质量大数据培训课程视频供广大学员下载学习。


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)