如何在 Mahout Spark 上编写推荐

How to write recommendation on Mahout Spark

驯象师 0.13.0 / java 8

我是 Mahout 的新手,正在尝试了解如何使用 Mahout 实现推荐引擎。目前我知道..

Mahout 提供 3 种类型的过滤 -

  1. 协同过滤(非基于 Hadoop)
  2. 分类(基于 Hadoop)
  3. 集群(基于 Hadoop)
  4. 基于内容的过滤

为了开始实施我的第一个建议,我从协同过滤开始,它很容易在没有 Hadoop 的情况下实施。

协同过滤 -

  1. 基于用户的推荐
  2. 基于项目的推荐
  3. 马虎
  4. 还有一些...

Mahout 界面:

1.DataModel 2.用户相似度 3.物品相似度 4. 用户邻居 5.推荐人

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

问题:

  1. 自从协同过滤基于 Map-Reduce 以来,Mahout 是否在 0.13.0 版本中完全弃用了 Map-Reduce?是否所有协同过滤算法都被弃用了?那有什么选择呢? Spark 是因为 Map-Reduce 与 Spark 相比性能较慢吗?
  2. 我检查过,Mahout 也提供 Spark and Flink 支持。 Mahout spark 提供了 2 种类型的过滤 -> spark item similarityspark row similarity. 但我还没有找到任何基于 java在 java 中创建推荐的示例。
  3. 可能是 Mahout Spark 与 Scala 的兼容性更好,但是我们可以在 Java 中编写基于 spark 项相似度和 spark 行相似度的推荐引擎吗?也推荐一些例子。
  4. Mahout Spark 可以 运行 在没有 Hadoop 的情况下独立运行吗?到目前为止,我知道 Spark 是 Hadoop 的替代品,我们可以在其中进行实时处理。除了 mahout-spark_2.10-0.13.0.jarmahout-spark_2.10-0.13.0 我需要添加的所有库-依赖关系-reduced.jar?
  5. Mahout spark 与独立的 Apache Spark 不同吗?我也在考虑使用独立的 Apache Spark。

谁能给我解释一下。

1) Map Reduce 已在 0.10.0 中完全弃用。 'new Mahout' 是一种数学表达的 Scala DSL,它是从引擎中抽象出来的——例如相同的 Scala 代码应该能够为 Flink/Spark/Other 引擎编译。是的,这是基于性能。

2) Java API 还没有完成很多工作,但我听说有人在做这方面的工作。

3.) 我想你是在问你是否可以在 Java 中编写一个 Spark 推荐引擎。答案是肯定的。但实际上,我的意思是,我没有在 Scala / Java 之间做很多移植,但理论上你应该能够将 Scala functions/classes 导入你的 Java 代码? This Link 展示了更多关于从头开始编写 reccomender 的信息——尽管它是在 Scala 中,但您需要将其移植到 Java(如果您这样做,请随时打开 PR,我们'我会把它作为一个例子。

4.) 是的,可以。 This Link 描述了如何在 Zeppelin 中使用 Mahout 设置 Spark,但任何设置的原则都保持不变(例如,您需要哪些 jar 以及您需要调整什么 SparkConf) iirc,你需要 mahout-spark、mahout-math、mahout-math-scala。 (spark-dependency-reduced,你只需要使用本地 shell 程序,例如 Zeppelin 或 Mahout Spark Shell)。

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

实际上,@rawkintrevo 谈论的新推荐算法存在于一个基于 Apache PredictionIO 的端到端交钥匙系统中,称为通用推荐系统。 PIO 带有一个 Java SDK。部分链接:

Apache Mahout、Apache PredictionIO、Spark 和 Universal Recommender 是用 Scala 编写的。 UR 有一个到 Java 的端口,但这没有维护,也不是真正需要的,因为您可能需要的所有选项都作为配置参数公开,并且有很好的文档记录。

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

UR支持基于用户、基于物品、购物车(基于物品集)、基于多模态数据(使用许多不同的用户指标或事件)的推荐。它还支持一组丰富的业务规则。

无需编写任何内容,只需输入您的数据并决定配置,剩下的就是安装和设置。