首先,上传u.data和u.item至/home/data文件夹下,并启动spark(spark-shell)。
1、导入数据并查看
val rawUserData=sc.textFile("file:/home/data/u.data")
2、查看前五条信息,以及userid,itemid,评分信息
textFile.take(5).foreach(println)
rawUserData.map(_.split("\t")(1).toDouble).stats()//查看userid信息
rawUserData.map(_.split("\t")(0).toDouble).stats()//查看itemid信息
rawUserData.map(_.split("\t")(2).toDouble).stats()//查看评分信息
3、导入ALS和Rating链接库
import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.mllib.recommendation.Rating
4、读取rawUserData的前三个字段
val rawRatings=rawUserData.map(_.split("\t").take(3) )
5、准备ALS训练数据
val ratingsRDD=rawRatings.map{case Array(user,movie,rating)=>Rating(user.toInt,movie.toInt,rating.toDouble)}
6、使用ALS.train命令进行训练
val model=ALS.train(ratingsRDD,10,10,0.01)
7、针对用户***推荐前5部电影
model.recommendProducts(196,5).mkString("\n")
8、查看针对用户196推荐电影1154的评分
model.predict(196,1154)
9、针对电影958推荐给5个用户
model.recommendUsers(958,5).mkString("\t")
10、创建电影ID与名称的对照表
val itemRDD=sc.textFile("/home/data/u.item")
11、显示电影ID名称对应表的前5条记录
movieTitle.take(5).foreach(println)
12、查询ID为146的电影名称
movieTitle(146)
13、显示前5条推荐给用户196的电影名称
model.recommendProducts(196,5).map(rating=>(rating.product,movieTitle(rating.product),rating.rating)).foreach(println)