设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

使用 Azure、Hadoop 和 Mahout 构建一个推荐系统

2013-7-17 11:48| 发布者: 红黑魂| 查看: 6308| 评论: 0|来自: 开源中国

摘要:   今天想帮助别人吗?  根据用户之前的回答历史,我们可以把Stack Exchange的新问题推荐给一个能够回答的用户,这与亚马逊通过你之前的购买记录给你提供推荐很相似。不知道Stack Exchange是做什么的? - 它运行了 ...

查看我之前的例子或许对你有帮助:MapReduce介绍及例子


实现 

从实现的角度来看:

  1. 我们需要一个Hadoop集群
  2. 我们需要下载数据,解压后分析 (Stack Overflow数据)
  3. Job 1 – 提取数据 - 将用户回答的所有数据提取成{UserId, QuestionId}的形式,每条一行
  4. Job 2 – 建立推荐 - 使用上述的MapReduce模型输出的用户数据建立推荐。

让我们运行起来!!


Step 1 - 配置集群

记住,Stack Exchange的数据量是很大的,因此我们需要有一个对等的分布式环境来处理。我们用Windows Azure,如果没有帐户的话可以注册免费试用。进入起始页面,打开HDInsight(Azure Hadoop)预设。

如果HDInsight可用便可以很容易地创建一个Hadoop集群,我创建了一个命名为stackanalyzer的集群。


集群就绪的话,你会在仪表盘界面上看到连接和管理按钮(此处没有图片)。单击“连接”按钮就将连接到集群节点,这样会打开一个远程节点的桌面连接。你也可以点击“管理”按钮打开基于Web的仪表盘界面。(如果需要,请阅读关于HDInsight的更多内容


Step 2 - 分析你的数据

通过远程桌面连接到集群的头节点后就可以下载Stack Exchange数据了。你可以根据需要从Clear Bits下载Stack Exchange网站的数据。我在头结点上安装了Mu-Torrent客户端,然后下载并解压了http://cooking.stackexchange.com/的数据 – 解压出的文件是一堆XML文件。


我们感兴趣的东西在XML文件中。文件中的每一行包含一个问题或回答,如果是问题则posttypeid = 1,如果是回答则posttypeid = 2。ParentID代表回答对应的问题的ID,OwnerUserId代表做出该回答的人。

<row Id="16" PostTypeId="2" ParentId="2" CreationDate="2010-07-09T19:13:37.540" Score="3" 
     Body="&lt;p&gt;...shortenedforbrevity...  &lt;/p&gt;&#xA;" 
     OwnerUserId="34" LastActivityDate="2010-07-09T19:13:37.540" />

所以对于我们来说,我们需要提取PostTypeId=2(类型是回答)的所有发表内容的{OwnerUserId,ParentId},这是{User,Question,Votes}的一个表示。后面我们将使用这些数据生成推荐结果。

原文件的数据量很大,从中提取数据也是一个不小的工作。对于这个Cooking网站,它没有那么多的数据–但如果分析整个Stack Overflow的话,文件大小也有数GB。针对提取的这个操作我们可以使用Hadoop并编写一个自定义的MapReduce操作。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部