全国职业院校技能大赛-大数据应用赛项-推荐系统

1、 根据子任务一的结果,计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户id(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),并根据Hive的dwd库中相关表或MySQL数据库shtd_store中相关表,获取到这10位用户已购买过的商品,并剔除用户6708已购买的商品,通过计算这10位用户已购买的商品(剔除用户6708已购买的商品)与用户6708已购买的商品数据集中商品的余弦相似度累加再求均值,输出均值前5商品id作为推荐使用,将执行结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。

结果格式如下:

------------------------推荐Top5结果如下------------------------

相似度top1(商品id:1,平均相似度:0.983456)

相似度top2(商品id:71,平均相似度:0.782672)

相似度top3(商品id:22,平均相似度:0.7635246)

相似度top4(商品id:351,平均相似度:0.7335748)

相似度top5(商品id:14,平均相似度:0.522356)

该题最主要考察的是对余弦相似度的计算
余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。

在spark种有多种计算余弦相似度的方法,本文为大家提供2种算法

  1. 根据公式计算
val v1 = Array(
1.0, 2.0, 3.0
)
 
val v2 = Array(
2.0, 2.0, 3.0
)
 
println(
v1.zip(v2).map(i => i._1 * i._2).sum
/
(Math.sqrt(v1.map(Math.pow(_, 2)).sum) * Math.sqrt(v2.map(Math.pow(_, 2)).sum))
)
  1. 根据余弦距离

cosineDistance 方法有时候idea自动导入不了,所以需要手动引入包 :breeze.linalg.functions.cosineDistance

println(1 - cosineDistance(DenseVector(v1), DenseVector(v2)))

代码实现

  1. 导包
import java.util.Properties
import org.apache.spark.ml.{
   Pipeline, linalg}
import org.apache.spark.ml.feature.{
   LabeledPoint, Normalizer, VectorAssembler}
import org.apache.spark.ml.linalg.{
   DenseVector, SparseVector}
import org.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值