如果一切进展顺利的话,你会看到如下结果: 正如你上面看到的,你可以在/output/Cooking目录中找到输出。如果你RDP到你集群的头结点,现在检查你的 输出目录,你应该可以看到Map Reduce Job创建的如下文件。 正如你所期待的,这些文件包含了提取的数据,这些数据代表UserId,QuestionId--所有被一个用户回答的问题。 如果你愿意,你可以把数据从HDFS加载到Hive,并用带有ODBC的Microsoft Excel观察到同样的结果。可以参看 我之前写的文章。 第 4 步 – 构建推荐系统并产生推荐作为下一步,我们需要构建共生矩阵并运行推荐作业,将{UserId,QuestionId}数据转变为推荐。幸运的是,我们 不需要为此写Map Reduce作业。我们可以使用Hadoop的同时使用Mahout库。 这里阅读Mahout相关资料 RDP到集群的头节点,因为需要安装Mahout。下载本文写作时最新版本的Mahout (0.7),原样拷贝到集群头节点的c:\app\dist目录。 Mahout的推荐作业(Recommender Job)支持以多种算法创建推荐——在本例中,我们将使用 SIMILARITY_COOCCURRENCE。 Mahout网站的 算法页面有更多关于推荐,聚类和分类的算法信息。我们将使用/output/Cooking目录的文件创建推荐信息。 该运行推荐作业了。创建一个users.txt,在该文件中记下推荐用户的ID,并且拷贝到HDFS (Hadoop Distributed File System) 现在,接下来的命令将启动推荐作业。记住,我们会用上面Map Reduce作业的输出文件作为推荐系统的输入。我们 点击启动这个推荐作业。这会在/recommend/目录下产生输出,就是在users.txt文件中指定的所有用户。可以使 用–num 推荐开关指定针对每个用户的推荐数量。如果用户与条目之间有偏好关系,(如用户播放一首歌的次数), 那么可以采用{user,item,preferencevalue}形式给推荐系统提供输入数据集——在本例中,我们省略了偏好权重。 注意: 如果下面的命令在运行后失败了,提示输出目录已经存在,就试试使用hadoop fs –rmr temp and hadoop fs –rmr /recommend/ 删除tmp目录和输出目录。
作业结束以后,检查/recommend/文件夹,试着打印一下生成文件的内容。你将会看到top推荐,针对users.txt文 件中的每个用户Id。 因此,如果给用户类似建议,推荐引擎会认为User 1393可以回答问题6419, 16897 等等。你可以试验一下其 他类似的类,像SIMILARITY_LOGLIKELIHOOD, SIMILARITY_PEARSON_CORRELATION等等,以便找到 最好的结果。迭代与优化到你满意为止。 不过这里尝试的是另一种实践——检查Stack Exchange数据集,找出怎样去创建一个推荐,根据用户喜欢的问题, 显示出'你或许也会喜欢‘的问题? 总结在这个例子中,我们手动上传所需的输入文件到HDFS,并手动触发推荐系统任务(Recommender Job)。事实上, 你可以利用Hadoop For Azure SDK自动完成整个的工作流。但这是另一篇文章要讲的,敬请期待。现实中有很 多分析工作要做,包括为提取并转存数据到HDFS编写映射/归并,自动创建hive表,用HiveQL或者PIG执行操作 等等。然而,我们刚刚检查的这些步骤涉及到用Azure,Hadoop和Mahout做一些有意义的事。 你在你的移动应用或者ASP.NET程序中访问这些数据,或者使用Sqoop导入到SQL Server,或者把数据加载到 Hive表中,这是我刚提到的。快乐编程,机器学习(Happy Coding and Machine Learning)。把HD Insight 捆绑到现存的应用来建立端对端工作流,如果你对这种案列比较感兴趣,你可以联系我。 我推荐你继续阅读 英文原文:Building A Recommendation Engine - Machine Learning Using Azure, Hadoop And Mahout |