spark基于物品的推荐_GitHub - MrQuJL/recommendation-based-on-SparkMLLib: 基于SparkMLLib实现的商品推荐功能,包括:基于用户的协同过滤,...

本文详细介绍了如何使用Spark MLlib实现协同过滤推荐算法,包括基于用户的CF和基于物品的CF。通过示例代码展示了如何计算用户和物品的相似度,以及如何为特定用户推荐商品。同时,提到了基于ALS的协同过滤算法及其应用。
摘要由CSDN通过智能技术生成

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("--------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值