recommendation-based-on-SparkMLLib
Spark MLLib 简介
Spark MLlib(Machine Learnig lib) 是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark的设计初衷就是为了支持一些迭代的Job, 这正好符合很多机器学习算法的特点。
Spark MLlib目前支持4种常见的机器学习问题: 分类、回归、聚类和协同过滤。Spark MLlib基于RDD,天生就可以与Spark SQL、GraphX、Spark Streaming无缝集成,以RDD为基石,4个子框架可联手构建大数据计算中心!
下图是MLlib算法库的核心内容:
协同过滤推荐算法
协同过滤算法(Collaborative Filtering:CF)是很常用的一种算法,在很多电商网站上都有用到。CF算法包括基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。
(一)、基于用户(User CF)的协同过滤算法
原理:
构建用户对物品的打分矩阵
根据余弦相似度公式计算用户相似度矩阵
找出与指定用户相似度最高的前N个用户
找出这N个用户评价过的商品,去掉被推荐的用户评价过的商品,则是推荐结果
代码实现:
import org.apache.log4j.Logger
import org.apache.log4j.Level
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.mllib.linalg.distributed.MatrixEntry
import org.apache.spark.mllib.linalg.distributed.CoordinateMatrix
import org.apache.spark.mllib.linalg.distributed.RowMatrix
object UserBasedCF {
def main(args: Array[String]): Unit = {
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
// 创建一个SparkContext
val conf = new SparkConf().setAppName("test").setMaster("local")
val sc = new SparkContext(conf)
// 读入数据
val data = sc.textFile("hdfs://qujianlei:9000/data/ratingdata.txt")
// 解析出评分矩阵的每一行
val parseData:RDD[MatrixEntry] = data.map(_.split(",")
match {case Array(user,item,rate) =>
MatrixEntry(user.toLong,item.toLong,rate.toDouble)})
// 构建关联矩阵
val ratings = new CoordinateMatrix(parseData)
// 转置矩阵以计算列(用户)的相似性
val matrix:RowMatrix = ratings.transpose().toRowMatrix()
// 计算得到用户的相似度矩阵
val similarities = matrix.columnSimilarities()
println("输出用户相似度矩阵")
similarities.entries.collect().map(x=>{
println(x.i + "--->" + x.j + "--->" + x.value)
})
println("--------------------------------