Spark 的 ALS 中唯一项目的数量有啥限制?

Posted

技术标签:

【中文标题】Spark 的 ALS 中唯一项目的数量有啥限制?【英文标题】:What is the limit to the number of unique items in Spark's ALS?Spark 的 ALS 中唯一项目的数量有什么限制? 【发布时间】:2017-11-01 12:41:17 【问题描述】:

我正在为一个工作项目使用 Spark 的 ALS 推荐器实现,并且围绕它如何处理规模进行了很多讨论。但不是事件的数量,而是产品目录中items的数量。

我担心 Spark RowMatrix 对象在分解任务中可以处理的列数有硬性限制 (~65,500)。显然,ALS 采用RDD 形式的稀疏矩阵:

sc.parallelize([(usr, itm, rtg), (usr2, itm2, rtg)])

但是,我在任何地方都找不到任何关于它是否在后端构建密集矩阵的讨论,因为 > 65k 个项目,我可能会遇到列限制。是否有任何关于 Spark ALS 实施的实际限制的讨论或文档?

【问题讨论】:

【参考方案1】:

基本上RowMatrix.computePrincipalComponents 与进程完全无关。 ml.ALS 不使用 mllib.linalg 数据结构。 ml.ALS 使用自己的分块算法。

理论限制是标识符的范围(IntLong 取决于专业化),但我怀疑它是否曾针对这样的数据集进行过测试。

【讨论】:

感谢您的跟进。 computePrincipalComponents 函数是链接,因为它提到了列限制。我知道它没有在分解过程中使用,只是想指出一些引用 65k col 限制的文档。不过,我不知道分块算法。这在一定程度上让我放心……但我想负载测试是这里唯一的答案?

以上是关于Spark 的 ALS 中唯一项目的数量有啥限制?的主要内容,如果未能解决你的问题,请参考以下文章

Spark ALS 推荐分数

Spark:测量 ALS 的性能

Spark ALS 算法给出了太多的零因子

深入理解Spark ML:基于ALS矩阵分解的协同过滤算法与源码分析

如何在 Spark 中确定 ALS.transImplicit 中的偏好/置信度?

Spark ALS转换性能