测试数据
用户ID,物品ID,评分
1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0
3,101,2.5
3,104,4.0
3,105,4.5
3,107,5.0
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0
(余弦相似度)基于用户id的智能推荐算法
package ml
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry, RowMatrix}
import org.apache.spark.rdd.RDD
/**
* 基于用户的协调过滤
*/
object UserBasedCF {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName(this.getClass.getSimpleName).setMaster("local[*]")
//创建一个sparkContext
val sc = new SparkContext(conf)
//读取数据
val data: RDD[String] = sc.textFile(args(0))
//使用模式匹配,返回矩阵基础数据
/**
* 这里的每一项都是(i:Long , j:Long , value:double)标示行列值得元组
* 其中i标示坐标,j标示列坐标,value是值
*/
val parseData: RDD[MatrixEntry] = data.map(_.split(",")
match {
case Array(user, item, rate) => MatrixEntry(user.toLong, item.toLong, rate.toDouble)
})
//构造评分矩阵
val ratings: CoordinateMatrix = new CoordinateMatrix(parseData)
val entries: Array[MatrixEntry] = ratings.entries.collect()
entries.foreach(println(_))
println("------------