电影推荐系统-[离线推荐部分](二)写代码(1)【创建环境+获取数据】

package offlineRecommender

import org.apache.spark.{SparkConf}
import org.apache.spark.sql.SparkSession

/**
  * @Author : ASUS and xinrong
  * @Version : 2020/9/20
  *         离线推荐算法
  */
object OfflineRecommender {
  //声明要用到的表
  val MONGODB_RATING_COLLECTION="Rating"
  val MONGODB_MOVIE_COLLECTIN="Movie"

  def main(args: Array[String]): Unit = {
    val conf=Map(
      "spark.core"->"local[2]",
      "mongo.uri"->"mongodb://192.168.212.21:27017/recom",
      "mongo.db"->"recom"
    )
    //1.创建Spark运行的环境(第二种创建环境的表现形式)
    //因为涉及到计算,所以这里设置一下executor的内存的大小和driver的内存大小
    val sparkConf=new SparkConf().setAppName("OfflineRecommender").setMaster(conf("spark.core"))
      .set("spark.executor.memory","6G")
      .set("spark.driver.memory","2G")
    val spark=SparkSession.builder().config(sparkConf).getOrCreate()

    //2.获取MongoDB中的数据
    import spark.implicits._
     //1)获取MongoDB的连接信息
    val mongoConfig=MongoConfig(conf("mongo.uri"),conf("mongo.db"))
     //2)获取数据
      //将DataFrame数据转换成RDD数据,需要先.as[Rating]再.rdd()
      //(1)获取Rating的数据
    val ratingRDD=spark
      .read
      .option("uri",mongoConfig.uri)
      .option("collection",MONGODB_RATING_COLLECTION)
      .format("com.mongodb.spark.sql")
      .load()
      .as[MovieRating]
      .rdd
      .map(rating =>(rating.uid,rating.mid,rating.score))
      .cache()

      //(2)获取Movie的数据
    val movieRDD=spark
      .read
      .option("uri",mongoConfig.uri)
      .option("collection",MONGODB_MOVIE_COLLECTIN)
      .format("com.mongodb.spark.sql")
      .load()
      .as[Movie]
      .rdd
      .map(_.mid)
      .cache()
  }
}

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3