目前,从spark1.0.0的scala 文档 来看,MLlib下的linalg包下的分布式矩阵,有三种:RowMatrix, IndexedRowMatrix, CoordinateMatrix. 除了CoordinateMatrix没有SVD方法,RowMatrix 有SVD,PCA方法,IndexedRowMatrix有SVD方法。但是CoordinateMatrix对于大的稀疏矩阵而言是最好的选择,如果想做SVD分解,该怎么办呢?
方法是有的,CoordinateMatrix 可以通过toIndexedRowMatrix(),转化成IndexedRowMatrix,然后再做分解。CoordinateMatrix还可以通过toRowMatrix()函数转化成RowMatrix(通过源代码发现本质是先转化成IndexedRowMatrix,然后再转化成RowMatrix),然后再做SVD,PCA。但是有个问题值得考虑。这个过程中是将CoordinateMatrix的元素(行,列,值)通过扩充