[转]基于Hbase的一个简单的商品推荐系统

基于Hbase的一个简单的商品推荐系统 博客分类: 架构

纵观业界的电商网站,我站在一个用户的角度来看,商品推荐有很多种:

一种是通过我搜索、查看的那件商品的,系统统计出搜索、查看该商品的其他用户搜索、查看其他商品的次数,把排名靠前的推荐给我,当当的一个栗子:

我查看了《Hadoop 权威指南》,系统给我推荐了一堆其他的书:

一种是通过我最近的搜索、查看过商品,系统给我推荐一些它认为我感兴趣的商品,淘宝的一个栗子:

还有几种,感觉挺有意思的:

特别是这个,搜索Hadoop
的用户,最终很多人都买了羽绒服,这是为什么呢?学习hadoop
的筒子们都很怕冷么?还是说,北方人居多?

  1. 五花八门哈,别的不管了。只讨论下第一种,个人YY设计下:基于Hbase的一个简单的商品推荐系统。
  2. 撇开其他的流程不说,单就这个推荐而言,基于Hbase的设计,两张表就OK了。一张表user_item记录每个用户查看了的所有商品,item_user记录查看了某个商品的所有用户。
  3. user_item:userid作为行健,列簇和列为item:itemid,数据如下:
  4. user1    item:itemid    timestamp=1234567891, value=item1
  5. user1    item:itemid    timestamp=1234567892, value=item2
  6. user1    item:itemid    timestamp=1234567893, value=item3
  7. user2    item:itemid    timestamp=1234567894, value=item4
  8. user2    item:itemid    timestamp=1234567895, value=item5
  9. user3    item:itemid    timestamp=1234567881, value=item1
  10. user3    item:itemid    timestamp=1234567832, value=item2
  11. user4    item:itemid    timestamp=1234567843, value=item3
  12. user4    item:itemid    timestamp=1234567854, value=item4
  13. user4    item:itemid    timestamp=1234567895, value=item5
  14. ......
  15. item_user:itemid作为行健,列簇和列为:user:userid,数据如下:
  16. item1    user:userid    timestamp=1234567891, value=user1
  17. item1    user:userid    timestamp=1234567892, value=user2
  18. item1    user:userid    timestamp=1234567893, value=user4
  19. item2    user:userid    timestamp=1234567894, value=user3
  20. item3    user:userid    timestamp=1234567895, value=user2
  21. item3    user:userid    timestamp=1234567881, value=user4
  22. item6    user:userid    timestamp=1234567832, value=user5
  23. item6    user:userid    timestamp=1234567843, value=user6
  24. item8    user:userid    timestamp=1234567854, value=user5
  25. item8    user:userid    timestamp=1234567895, value=user4
  26. ......
  27. 大概的业务是:我查看《Hadoop权威指南》(item1)时,系统从item_user表中以item1作为行健查询出所有查看过item1的用户,再分别以各userid为行健,从user_item表中查询出所有查看过的商品,最后去重、统计、排序并显示。

http://f.dataguru.cn/thread-33415-1-1.html

原文地址:https://www.cnblogs.com/shujuxiong/p/11261840.html

时间: 2024-10-10 09:15:08

[转]基于Hbase的一个简单的商品推荐系统的相关文章

基于OR1200的一个简单SOPC

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 在本书第2章建立了最小系统,最小系统只由CPU.QMEM模块组成,借助于最小系统,我们分析了OR1200各类指令的执行过程.熟悉了流水线的工作原理以及CPU内部各个模块的代码实现,第10章在最小系统上增添了IMMU.DMMU模块,借此分析了OR1200中内存管理单元的实现原理.本章将建立一个基于OR1200的简单SOPC,后面的示例程序将运行在这个简单SOPC之上,借助于该SOPC分析OR1200中ICache.DCache.Wishbo

一个简单的在线推荐系统的实现

推荐系统,主要采用对历史数据的分析计算,得到某种模型,对未来的数据进行预测.说到底,还是分类问题. Mahout,是一个可扩展的机器学习库,可用于单机,也可用于Hadoop. Mahout的API非常简单,实现一个推荐功能只需要如下的几行代码: DataModel model = new FileDataModel(new File(file));//建立数据模型 UserSimilarity similarity = new PearsonCorrelationSimilarity(model

基于Java的一个简单的文件上传下载功能

最近在公司给客户端做接口,有一个图片上传和文件下载的功能,本来想用Struts来做文件上传下载,但是看了下公司好像没有这个配置,然后看了下同事的代码,才发现原来Apache也可以简单的实现文件上传下载. 首先引入commons-io-2.2.jar FileUtils为我们提供了很多对文件的操作的方法,比如上传整个文件夹的文件.上传单个文件等 然后请看代码下载: public static void uploadFile(String targetDirectory,String targetF

基于mykernel的一个简单的时间片轮转多道程序内核代码分析

学号023作品 本实验资源来源: https://github.com/mengning/linuxkernel/ 一.观察简易操作系统 此处使用实验楼的虚拟机打开终端 cd LinuxKernel/linux-3.9.4 rm -rf mykernel patch -p1 < ../mykernel_for_linux3.9.4sc.patch make allnoconfig make #编译内核请耐心等待 qemu -kernel arch/x86/boot/bzImage 在QEMU窗口

接口测试之基于LoadRunner的一个简单示例

这几天一直在捣鼓接口测试,以下总结一下: 1.什么是接口测试:接口是指系统模块与模块之间或者系统与系统之间进行交互,一般我们用的多的是HTTP协议的接口.WebService协议的接口.还有RPC(Remote Procedure Call Protocol)的接口.不管是哪种接口,其本质就是发送一个Request,然后服务器响应后返回一个response,然后我们对response进行分析,这就是接口测试. 2.消息接口测试的两种: a) Webservice:使用soap协议得到想要的东西(

基于live555的一个简单RTSP服务器

1,编译live555源码目录下的 BasicUsageEnvironment.groupsock.liveMedia.UsageEnvironment四个工程生成相应的库文件: 目录结构如下: 2,包含上面四个工程目录下的include目录文件和生成的库文件,编译mediaServer目录下的文件,会生成相应的exe文件(在windows下编译生exe,在linux下可以生成相应的运行程序) 在windows平台上会生成mediaServer.exe文件,运行该exe文件如下图: 3,把提示中

基于netty的一个简单的时间服务器的实现(netty学习)

基本功能:与客户端建立连接后立刻发送当前时间 先建立一个时间的类 package timeExample; import java.sql.Date; public class UnixTime { private final long value; public UnixTime() { this(System.currentTimeMillis()/1000L); } public UnixTime(long value) { this.value = value; } public lon

基于HOST制作一个简单的可启动的Linux

创建新系统的根目录/mnt/sysroot: #mkdir /mnt/sysroot 2.添加一块硬盘/dev/sdb,给目标磁盘分区格式化 两个: 宿主机上:/dev/sdb1, /dev/sdb2 /dev/sdb1 挂载至 /mnt/sysroot/boot(目标主机根文件系统创建完成再挂载) /dev/sdb2 挂载至 /mnt/sysroot 创建目标主机的根文件系统 # mkdir -pv /mnt/sysroot/{etc/rc.d, usr, var, proc, sys, de

基于WSGI封装一个简单WEB框架

from wsgiref.simple_server import make_serverdef index(): return 'index'def login(): return 'login'def routes(): urlpatterns=( ('/index',index), ('/login',login), ) return urlpatternsdef runserver(environ,start_response): start_response('200 OK' , [(