我正在使用格式为RDD[(Int, Int, Double)]
的rdd。如果第一个值对应于行索引,则第二个值对应于列索引,第三个值对应于此行索引,列索引中的值。
如何从这个rdd创建局部稀疏矩阵?我所做的是以下内容:
val denseLocalMatrix = new CoordinateMatrix(inputRDD.map {
case (row, col, rw) => MatrixEntry(row.toLong, col.toLong, rw)
})
.toBlockMatrix()
.toLocalMatrix()
但这是一个密集的局部矩阵。如何从最初inputRDD
创建一个稀疏的?任何见解?
我希望Matrices.sparse
格式与python csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)])
库的scipy
类似,但Matrices.sparse
的情况并非如此:
SparseMatrix(numRows: Int, numCols: Int, colPtrs: Array[Int], rowIndices: Array[Int], values: Array[Double])
colPtrs:对应于新列开头的索引。
rowIndices:条目的行索引。它们必须严格按每列增加的顺序排列。
所以我想不出一种方法可以直接使用这个。
修改:
定义问题的另一种方法是:
如何(colIndices:Array[Int], rowIndices: Array[Int]) => (colPtrs:Array[Int], rowIndices: Array[Int])