需要澄清hadoop中mahout的用法吗

cx6n0qe3  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(411)

我目前在mahout中使用内存中的推荐api实现了一个推荐器。不过,为了计算离线推荐,我想转向使用hadoop的分布式解决方案。这是我第一次使用hadoop,我想澄清一些概念和api用法。
目前,我对hadoop的了解很少,我认为正确的方法如下:
使用apachedrill之类的工具,用用户和项目数据填充hdfs。
利用hdfs数据在mahout列中进行推荐作业。
将hdfs中的结果数据转换为solr使用的索引碎片
使用solr向用户提供建议
不过,我想澄清一下这个设计的几个方面:
我将如何使用rescorer的方式,它是在内存中使用的实时建议?
调用推荐作业的最佳方式是什么?
除了这两个问题之外,我还有其他问题,但这些问题的答案将是一个巨大的帮助。

dojqjjoe

dojqjjoe1#

您可能在谈论mahout+hadoop+solr推荐程序。此方法以两种不同的方式处理重新排序。
基本推荐者可以通过两种方式组合在一起:
以(用户id、项目id、首选项权重)的形式将数据导入hdfs后,对数据运行itemsimilarityjob(使用llr similarity,这是最好的)。它将创建一个所谓的指标矩阵。这将是一个逐项id稀疏的值矩阵,表示任意两个项之间的相似程度。然后必须将其转换为solr可以索引的值。这意味着要将内部mahout整数id转换成一些独特的字符串表示形式,这可能就是它们最初的样子。这看起来像一个csv文件(item123,item223,item643,item293,item445…)。所以有两个solr字段,第一个是条目id,第二个是相似条目的列表。所有ID必须是文本标记。然后,对建议的查询是一个solr查询,它由特定用户所显示的首选项id组成。所以query=“item223 item344 item445…”。对指示器矩阵值所在的字段进行查询。您将得到一个有序的项目ID列表
对您来说,一种更简单的方法是使用mahout 1.0-snapshot的/examples文件夹中的工具,或者在这里:https://github.com/pferrel/solr-recommender. 它接收原始日志文件,其中包含用户和项目ID的唯一字符串。它完成了hadoop上的所有工作,以输出csv,这些csv可以由solr直接索引,也可以如上所述加载到db中。
我做演示网站的方式(https://guide.finderbots.com)是使用我的SolrWeb应用集成,将指标矩阵放入db中,将类似的项目列表附加到我的项目集合中。所以123得到223 643 293 445。。。在指示器字段中。索引集合后,查询为=“item223 item344 item445…”——用户首选的项。
以下是三种重新排序的方法:
将元数据与查询混合。因此,您可以对indicator字段执行query=“item223 item344 item445…”,对“genre”字段执行“scfi”。这使您可以在查询中混合协作过滤和元数据,正如您所想象的,rec基于用户的首选项,但偏向于“scfi”。一旦您将项+指标+元数据放入索引中,您还可以做很多其他有趣的事情。
按元数据筛选记录。你可以得到记录不歪斜,但过滤,如果你想。对指示器字段使用solr query=“item223 item344 item445…”,对“流派”字段使用“scfi”作为过滤器。在这种情况下,除了“scfi”你什么都得不到,而“scfi”你得到的大多是“scfi”
根据您对用户、上下文或项的其他了解,取回您的rec有序列表并以任何方式重新存储它们。通常,这些可以被编码到solr查询中并用一个查询完成,但是在返回rec之后也可以进行重新排序和过滤。你必须写代码,它不是内置的。
有趣的是,您可以将过滤器、元数据字段和用户首选项与solr所称的“boost”值混合,以获得各种重新排序。solr甚至可以使用位置来查询、倾斜或过滤。
注意:你不必担心solr碎片。solr将直接索引大多数dbs和hdf,但只有索引是分片的。如果你有一个非常大的索引,你可以分片索引;如果你每秒有很多查询,你可以复制索引(或者进行故障转移)。solr查询通常是非常快的,所以在您有一个正常运行的系统之后,我会担心这一点,因为它是一个配置的东西,不应该受到工作流的其他部分的影响。

相关问题