Spark:RDD到局部稀疏矩阵

时间:2017-10-11 08:27:19

标签: scala apache-spark

我正在使用格式为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])

0 个答案:

没有答案