电影推荐系统-[离线推荐部分](二)写代码(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() } }