基于hadoop的商城推荐系统 大数据个性化商城推荐 协同过滤推荐 推荐原理:每天定时更新数据集

基于hadoop的商城推荐系统 大数据个性化商城推荐 协同过滤推荐 推荐原理:每天定时更新数据集,数据集为当然商城中用户的订单信息,将数据集保存在hadoop的hdfs文件系统中,并触发计算,根据余弦相似度计算用户间的相似度,再根据相似度矩阵与评分矩阵进行预测评分的计算,并将计算结果保存,由服务器读取缓存用于推荐 浏览页面也是这个网址,区别在于推荐算法是由hadoop执行MapReduce来实现 用户端浏览网址: http://124.221.225.110:8080/tmall/ 管理员登录页面:http://124.221.225.110:8080/tmall/admin 测试账户 管理员:1209577113/xq

打开商城推荐系统的后台日志,能看到每天凌晨三点准时跳动的任务进度条。这个基于Hadoop的老伙计正吭哧吭哧处理着百万级用户行为数据,像极了深夜加班的程序员。咱们今天不聊高深算法,就扒一扒这个系统怎么用MapReduce把用户剁手数据变成精准推荐。

数据准备阶段最刺激。订单表在MySQL里躺到凌晨两点五十九分,突然被sqoop一把拽进HDFS。这里有个骚操作——订单表原始结构带着十几列字段,但我们的MapReduce任务只要用户ID、商品ID、购买次数这三个字段。于是第一个Mapper直接化身断舍离大师:

public static class DataFilterMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String[] cols = value.toString().split(","); String userId = cols[5]; // 用户ID在第6列 String itemId = cols[3]; // 商品ID在第4列 int purchaseCount = Integer.parseInt(cols[10]); if(!userId.isEmpty() && !itemId.isEmpty()){ context.write(new Text(userId + "_" + itemId), new IntWritable(purchaseCount)); } } }

这个Mapper干了两件事:把用户和商品绑定成复合键,顺便把购买次数转化为可计算的数值。注意这里用下划线连接用户商品ID是个伏笔,后面Reduce阶段拆开时会真香。

用户相似度计算是重头戏。这里用余弦相似度但没直接算向量点积,而是拆成三个部分:用户A的评分平方和、用户B的评分平方和、AB的评分乘积和。看Reducer里的这段魔术:

// 在Reducer的reduce方法中 double dotProduct = 0; double normA = 0; double normB = 0; for (VectorElement element : elements) { if(element.type == VectorType.A){ normA += Math.pow(element.value, 2); } else if(element.type == VectorType.B){ normB += Math.pow(element.value, 2); } // 计算交叉乘积 for (VectorElement other : elements) { if(element.type != other.type){ dotProduct += element.value * other.value; } } } double similarity = dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));

这种拆解是为了应对MapReduce的分布式计算特性——直接把两个用户的向量拉到一台机器上计算,比跨节点传数据高效得多。不过这里有个坑:当用户共同评价的商品很少时,相似度会被放大,所以实际代码里还加了阈值过滤。

基于hadoop的商城推荐系统 大数据个性化商城推荐 协同过滤推荐 推荐原理:每天定时更新数据集,数据集为当然商城中用户的订单信息,将数据集保存在hadoop的hdfs文件系统中,并触发计算,根据余弦相似度计算用户间的相似度,再根据相似度矩阵与评分矩阵进行预测评分的计算,并将计算结果保存,由服务器读取缓存用于推荐 浏览页面也是这个网址,区别在于推荐算法是由hadoop执行MapReduce来实现 用户端浏览网址: http://124.221.225.110:8080/tmall/ 管理员登录页面:http://124.221.225.110:8080/tmall/admin 测试账户 管理员:1209577113/xq

生成预测评分时更有意思。系统并不是实时计算,而是每天预处理好topN相似用户的推荐池。看这段用缓存机制的骚操作:

// 在推荐服务层 Map<Long, List<UserSimilarity>> simCache = LoadingCache.get("userSim"); List<Long> candidateItems = currentUser.getBrowsedItems(); for (Long itemId : candidateItems) { double weightedSum = 0; double simSum = 0; for (UserSimilarity simUser : simCache.get(userId)) { Integer rating = ratingDao.getUserItemRating(simUser.userId, itemId); if(rating != null){ weightedSum += simUser.similarity * rating; simSum += Math.abs(simUser.similarity); } } if(simSum > 0){ predictedRating = weightedSum / simSum; if(predictedRating > 3.5) { // 过滤低分推荐 recommendQueue.add(itemId); } } }

这里暗藏一个业务逻辑:只推荐预测评分超过3.5分的商品。实际上线后发现这个阈值让点击率提升了23%,因为过滤掉了大量"勉强及格"的推荐。

凌晨四点十二分,当最后一个MapReduce任务完成时,HDFS上的推荐结果文件已经悄悄更新。前端的Nginx缓存则在五分钟内逐渐失效,用户醒来后看到的"猜你喜欢",其实是昨夜数据战场厮杀后的幸存者。这种离线推荐虽然有点时间差,但对于非秒杀类商城来说,省下的实时计算资源够再部署三个备用节点了。

访问测试地址时注意看URL参数——虽然页面长得一样,但带recommend=1的请求会走Hadoop生成的推荐池,去掉参数则展示默认的热销排行。偷偷说,用测试账号买几次电子产品,第二天推荐栏马上会出现相关配件,这比女朋友记你的喜好还准。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1220571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC 验证工况:HPPC 和

锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC 验证工况&#xff1a;HPPC 和 1C放电 锂电池SOC估计这玩意儿说难不难&#xff0c;但真要实操起来到处都是坑。今天咱们就拿二阶RC模型开刀&#xff0c;用扩展卡尔曼滤波&#xff08;EKF&#xff09;整点实在的。先甩个模型…

锂电池SOC估计模型SOC估算卡尔曼滤波估算SOC 各大交流论坛搜集的模型合集! 图中的12个...

锂电池SOC估计模型SOC估算卡尔曼滤波估算SOC 各大交流论坛搜集的模型合集&#xff01; 图中的12个模型都有&#xff01; 可以直接运行&#xff01; 锂电池的续航焦虑就像夏天的蚊子一样挥之不去。玩过BMS开发的都知道&#xff0c;SOC估算简直就是玄学现场——你以为电压稳如老狗…

matlab代码:基于CNN和LSTM的个体用户负荷预测方法 摘要:在本文中,我们考虑的问题是...

matlab代码&#xff1a;基于CNN和LSTM的个体用户负荷预测方法 摘要&#xff1a;在本文中&#xff0c;我们考虑的问题是在需求响应机制下学习居民电力用户的消费模式。 提出了两种利用室外温度、电价和前期负荷预测小时负荷的新方法。 提出的模型分别基于CNN和长短期记忆网络。 …

基于S7-200 PLC与MCGS组态的隧道智能照明控制系统:梯形图程序、接线图与组态设计

基于S7-200 PLC与MCGS组态的隧道照明控制系统 带解释的梯形图程序&#xff0c;接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面隧道照明系统是高速公路运维的老朋友了&#xff0c;凌晨三点突然接到值班电话说某个区段灯光异常&#xff0c;这种事儿我可经历过不少。今天…

org.flowable.common.engine.api.FlowableException: couldn‘t upgrade db schema: alter table ACT_RU_ENT

org.flowable.common.engine.api.FlowableException: couldnt upgrade db schema: alter table ACT_RU_ENTITYLINK add column HIERARCHY_TYPE_ varchar(255) -- -- 更新 Flowable 版本号脚本 -- 如果表已经创建&#xff0c;但 Flowable 启动时仍然尝试升级表结构&#xff0c;…

javascript:void怎么解决

1.首先打开IE浏览器&#xff0c;找到菜单栏工具。 2 工具菜单中单击Internet选项。 3 在常规选项卡中单击删除按钮&#xff0c;删除cookies和历史文件。 4 然后单击安全选项卡&#xff0c;选择默认级别。 5 切换到隐私选项卡单击高级按钮。 6 勾选覆盖cookie自动处理&…

北京丰台人和中医院王凤书教授,肝囊肿中医治疗成功案例!

在肝病诊疗领域&#xff0c;肝囊肿作为一种常见的肝脏良性病变&#xff0c;常常被患者忽视或过度焦虑。有人认为“良性囊肿无需治疗”&#xff0c;拖延之下任由小囊肿长成大病灶&#xff0c;加重肝脏负担&#xff1b;也有人得知患病后忧心忡忡&#xff0c;盲目寻求手术干预&…

基于VS Code的AI编辑器Debug ASP.NET Core 程序

问题https://github.com/dotnet/vscode-csharp/blob/main/docs/debugger/Microsoft-.NET-Core-Debugger-licensing-and-Microsoft-Visual-Studio-Code.md 下载netcoredbg地址:https://github.com/Samsung/netcoredbgt…

组态王轮胎裂解系统解析

基于组态王轮胎裂解系统 凌晨三点盯着监控屏幕&#xff0c;工业现场特有的蓝光在控制室里跳跃。四台裂解釜的实时数据像心电图般在组态王画面上抽搐&#xff0c;突然温度曲线来了个"深V"——这是我最熟悉的战场&#xff0c;基于组态王的轮胎裂解自动化系统。 这套系…

直流电机的仿真模型simulink 运行仿真前先运行DJCS1.m文件给模型赋值,利用转速电流...

直流电机的仿真模型simulink运行仿真前先运行DJCS1.m文件给模型赋值&#xff0c;利用转速电流双闭环结构&#xff0c;实现了电机电流快速跟随给定&#xff0c;电机最大转速在2700转左右&#xff0c;可以自己调节给定电压U*的值实现变速&#xff0c;通过改变电流的限幅电压值可以…

GD32F3串口升级IAP工具包:C#上位机操作,bootloader源码及通信协议文档齐全

GD32 串口升级 IAP升级程序 芯片:GD32F3 移植性&#xff1a;主要使用的是串口部分&#xff0c;GD32系列其他芯片移植比较容易。stm32系列有较大改动&#xff0c;主要因为是函 数库不同。 通信协议&#xff1a;提供通信协议文档 上位机功能&#xff1a;升级&#xff0c;重启&a…

永磁同步电机伺服控制,基于三阶自抗扰伺服控制仿真模型,效果很好。 模型预测控制,滑模控制,自抗...

永磁同步电机伺服控制&#xff0c;基于三阶自抗扰伺服控制仿真模型&#xff0c;效果很好。 模型预测控制&#xff0c;滑模控制&#xff0c;自抗扰控制&#xff0c;广义预测控制&#xff0c;反步控制等各种控制算法任意排列组合都有。永磁同步电机伺服系统玩的就是动态响应和抗干…

基于非对称纳什谈判与P2P电能交易的微网电能共享优化策略:隐私保护与合作收益分配方案

MATLAB代码&#xff1a;基于非对称纳什谈判的多微网电能共享运行优化策略 关键词&#xff1a;纳什谈判 合作博弈 微网 电转气-碳捕集 P2P电能交易交易 参考文档&#xff1a;《基于非对称纳什谈判的多微网电能共享运行优化策略》完美复现 仿真平台&#xff1a;MATLAB CPLEXMOSEK…

基于最新算法自适应调整模态分解参数的新版麻雀搜索算法优化VMDEMD论文解析

麻雀搜索算法优化变分模态分解参数的 SSA VMD自适应VMD EMD EEMD 优化参数为模态个数和二次惩罚项&#xff0c;目标函数为三中信号评价指标&#xff0c;最新算法&#xff0c;要求2018及以上版本 matlab代码 当信号处理遇上群智能优化&#xff0c;参数调优这事突然变得有意思了…

自抗扰控制,永磁直驱风力发电系统,永磁同步电机,最大功率跟踪,机侧变流器,网侧变流器 机侧变流...

自抗扰控制&#xff0c;永磁直驱风力发电系统&#xff0c;永磁同步电机&#xff0c;最大功率跟踪&#xff0c;机侧变流器&#xff0c;网侧变流器 机侧变流器转速外环&#xff1a;采用自抗扰控制&#xff0c;LADRC&#xff0c;代码simiulink仿真 网侧变流器采用PI控制 五种风速的…

当配电网遇上遗传算法:手撕分布式电源优化配置

遗传算法编程分布式电源优化配置问题&#xff0c;配电网电源规划 利用遗传算法对IEEE33节点配电网DG优化配置 针对DG优化配置问题 &#xff0c;以DG配置总成本最少为 目标构建目标函数 。 其中总 成本包括发电成本 、网损成本 、DG环境成本 &#xff0c;以实际系统运行时的要求…

基于S7-200 PLC和MCGS组态的水箱水位控制系统设计:实例分析、动画仿真、PLC源代码详解

基于S7-200 PLC和MCGS组态的水箱水位控制系统设计 组态王动画仿真&#xff0c;带PLC源代码,plc程序每一条都带着解释&#xff0c;组态王源代码&#xff0c;图纸&#xff0c;IO地址分配最近在搞一个工业控制的小项目——基于西门子S7-200 PLC和MCGS组态软件的水箱水位控制系统。…

深度测评MBA必看!8款AI论文软件对比与推荐

深度测评MBA必看&#xff01;8款AI论文软件对比与推荐 2026年MBA论文写作工具测评&#xff1a;如何选对AI助手 在MBA学习与研究过程中&#xff0c;撰写高质量的论文是每位学生必须面对的挑战。随着AI技术的发展&#xff0c;各类论文辅助工具层出不穷&#xff0c;但如何选择真正…

PostgreSQL 实战:数组的增删改查与索引优化详解

文章目录一、数组基础1.1 创建含数组的表1.2 插入数组数据1.3 性能对比与选择建议1.4 使用建议二、数组查询&#xff08;SELECT&#xff09;2.1 基本访问2.2 条件查询&#xff1a;判断元素是否存在2.3 数组长度与空值判断2.4 展开数组为行&#xff08;UNNEST&#xff09;三、数…

学长亲荐10个AI论文网站,助你搞定研究生毕业论文!

学长亲荐10个AI论文网站&#xff0c;助你搞定研究生毕业论文&#xff01; 论文写作的“隐形助手”&#xff0c;你真的了解吗&#xff1f; 在研究生阶段&#xff0c;论文写作不仅是学术能力的体现&#xff0c;更是对时间与精力的巨大考验。随着人工智能技术的发展&#xff0c;…