如何在Mahout Spark上写推荐

时间:2017-08-27 09:31:09

标签: java hadoop apache-spark mahout mahout-recommender

Mahout 0.13.0 / java 8

我是Mahout的新手,并试图了解如何使用Mahout实施推荐引擎。到目前为止,我知道..

Mahout提供3种类型的过滤 -

  1. 协作过滤(非基于Hadoop)
  2. 分类(基于Hadoop)
  3. 群集(基于Hadoop)
  4. 基于内容的过滤
  5. 为了开始实施我的第一个建议,我开始使用协作过滤,无需Hadoop即可轻松实现。

    协作过滤 -

    1. 基于用户的建议
    2. 基于项目的建议
    3. Slop one
    4. 还有一些......
    5. Mahout界面:

      1.DataModel 2. UserSimilarity 3. ItemSimilarity 4. UserNeighborhood 5.推荐人

      我理解它的组件,并使用多个相似性和邻域的组合编写了基于用户和项目的推荐。

      问题:

      1. 由于基于Map-Reduce的协同过滤,Mahout是否在0.13.0版本中完全弃用了Map-Reduce?所有协同过滤算法都被弃用了吗?那么替代方案是什么?是Spark吗,因为与Spark相比,Map-Reduce的性能较慢?
      2. 我查了一下,Mahout也提供了对SparkFlink的支持。 Mahout spark提供2种类型的过滤 - > 火花项目相似性火花排相似性。但我还没有找到任何基于java的示例来在java中创建推荐。
      3. 可能是Mahout Spark与Scala有更好的兼容性,但是我们可以根据Spark项目相似性和Java中的spark行相似性来编写推荐引擎吗?建议一些例子。
      4. Mahout Spark可以在没有Hadoop的情况下独立运行吗?到目前为止,我知道Spark是Hadoop的替代品,我们可以在这里进行实时处理。我需要添加的所有库除了 mahout-spark_2.10-0.13.0.jar mahout-spark_2.10-0.13.0-dependency-reduced.jar?
      5. Mahout spark与独立的Apache Spark不同?我正在考虑使用独立的Apache Spark。
      6. 有人可以澄清我。

2 个答案:

答案 0 :(得分:2)

实际上新的推荐算法@rawkintrevo谈论了存在于基于Apache PredictionIO的端到端交钥匙系统,称为Universal Recommender。 PIO附带一个Java SDK。一些链接:

Apache Mahout,Apache PredictionIO,Spark和Universal Recommender都是用Scala编写的。 UR有一个Java端口,但是没有维护,并且实际上并不需要它,因为您可能需要的所有选项都作为配置参数公开,并且记录完备。

通过实时发送数据和进行实时查询来进行通信的方式是通过简单的REST调用或使用包含Java的PIO SDK。

UR支持基于用户的,基于项目的购物车(基于项目集),基于多模态数据的推荐(使用许多不同的用户指示符或事件)。它还支持丰富的业务规则。

除了输入数据并决定配置外,无需编写任何内容,其余的是安装和设置。

答案 1 :(得分:1)

1)Map Reduce在0.10.0完全弃用。 “新Mahout”是一个数学上富有表现力的Scala DSL,它从引擎中抽象出来 - 例如相同的Scala代码应该能够为Flink / Spark / Other Engines编译。是的,这是基于表现。

2)Java API没有做过很多工作,但是我听说有一些人正在研究它。

3。)我想你是否可以用Java编写Spark推荐引擎。答案是肯定的。但实际上,我的意思是,我没有在scala / Java之间进行大量移植,但理论上你应该能够将Scala函数/类导入到Java代码中? This Link显示了从头开始编写reccomender的更多信息 - 虽然它在Scala中,但您需要将其移植到Java(如果您这样做,请随意打开PR,我们将其包含在内一个例子。

4。)是的,它可以。 This Link描述了如何在Zeppelin中使用Mahout设置Spark,但是任何设置的主体都保持不变(例如,您需要哪些罐子以及需要调整的SparkConf) iirc,你需要mahout-spark,mahout-math,mahout-math-scala。 (火花依赖性降低,你只需要使用本地shell程序,例如Zeppelin或Mahout Spark Shell)。

5.。是的,Mahout是一个在Spark或其他分布式引擎上运行的库。