Spark如何分配SVD计算?

时间:2018-08-22 16:01:55

标签: scala apache-spark matrix cluster-computing svd

我正在非常大的低秩矩阵(〜125,000,000行,19列)上运行Scala Spark SVD操作(以客户端模式)。我正在尝试了解Spark SVD函数如何在群集内分配此操作-特别是,改组是如何发生的。我了解(如果我错了,请纠正我)Spark计算群集上的协方差矩阵,然后将其发送给驱动程序,并在那里计算特征值和特征向量。但是,我不确定群集部分如何分布。我认为有两种可能性:

可能性1:Spark将RowMatrix分组为行的子集,并将每个子集发送到不同的执行器,为每个子集计算一个单独的协方差矩阵,然后计算一个新矩阵作为所有协方差矩阵的加权平均值,并提取特征值以及来自驱动程序的特征向量。

可能性2:Spark将RowMatrix的所有行改组为集群中的单个执行器,一次为整个数据集计算一个协方差矩阵,然后将协方差矩阵发送给驱动程序以提取特征值和特征向量。

>

我希望第一种情况是实际发生的情况,因为将我的整个数据集改组到单个执行程序是非常I / O密集的,而在多个执行程序上计算单独的协方差矩阵将允许改组并行化-而不是提到协方差计算将在较小的数据集上执行。有人能启发我关于Spark SVD幕后的实际情况吗?

0 个答案:

没有答案