【问题标题】:Spark - MLlib computeSVD executing on driverSpark - 在驱动程序上执行的 MLlib computeSVD
【发布时间】:2016-08-26 04:14:13
【问题描述】:

我正在使用 scala 运行 RowMatrix.computeSVD,在 UI 中,似乎只有一个阶段只有“treeAggregate”在集群上运行,之后应用程序主控的 UI 没有显示任何内容,而应用程序继续执行 computeSVD。所以我假设只有“treeAggregate”在集群上运行,其余的在驱动程序上。

有没有办法让所有计算 SVD 在集群上运行? Driver 通常资源有限,对于 9446*9446 的矩阵,computeSVD 需要很长时间。

【问题讨论】:

    标签: apache-spark apache-spark-mllib svd


    【解决方案1】:

    不幸的是,如果不修改私有 API,修改策略似乎是不可能的。

    根据列数和k,Spark 会自动调整计算策略,并且仅当两个数字都很大并且k 与列数相比相对较高时,才会使用多遍的完全分布式模式。

    乍一看,您可以通过将k 保持在nCol / 3ncol / 2 之间来触发分布式计算。

    【讨论】:

    • OK zero323,我需要保存维度,所以我使用 k= 9446。我使用 SVD 稍后执行原始矩阵的逆运算。我认为这是一个很大的数字,但我仍然没有看到集群上分布的作业,它在驱动程序上运行
    • zero323,如果我想使用全等级怎么办?
    • 如果这里没有合适的解决方案。由于所需的课程一直是privatemllib,因此这里没有太多选择。您要么重新实现,要么故意打破访问限制。
    • 好的,我相信这就是它的实现方式。谢谢zero323
    • @ zero323,你能告诉我如何“打破访问限制”
    猜你喜欢
    • 2017-11-14
    • 2017-05-29
    • 2018-08-20
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多