Scala Spark:RDD到局部稀疏矩阵
我有一个rdd格式:Scala Spark:RDD到局部稀疏矩阵,scala,apache-spark,Scala,Apache Spark,我有一个rdd格式:rdd[(Int,Int,Double)]。其中第一个值对应于行索引,第二个值对应于列索引,第三个值对应于此行索引中的值,即列索引 如何从这个rdd创建一个局部稀疏矩阵?我所做的工作如下: val denseLocalMatrix = new CoordinateMatrix(inputRDD.map { case (row, col, rw) => MatrixEntry(row.toLong, col.toLong, rw) }) .toBlockM
rdd[(Int,Int,Double)]
。其中第一个值对应于行索引,第二个值对应于列索引,第三个值对应于此行索引中的值,即列索引
如何从这个rdd创建一个局部稀疏矩阵?我所做的工作如下:
val denseLocalMatrix = new CoordinateMatrix(inputRDD.map {
case (row, col, rw) => MatrixEntry(row.toLong, col.toLong, rw)
})
.toBlockMatrix()
.toLocalMatrix()
但这是一个稠密的局部矩阵。如何从初始的inpurdd
创建稀疏的一个?有什么见解吗
我希望matrix.sparse
格式类似于pythonscipy
库的csr\u矩阵((数据,(行索引,列索引)),[shape=(M,N)]
,但与矩阵不同。sparse
希望:
SparseMatrix(numRows: Int, numCols: Int, colPtrs: Array[Int], rowIndices: Array[Int], values: Array[Double])
colPtrs:对应于新列开头的索引
RowIndex:条目的行索引。它们必须严格按照每列的递增顺序排列
所以我想不出一个直接使用这个的方法
编辑:
另一种定义问题的方法是:
如何
(colIndices:Array[Int],rowIndexs:Array[Int])=>(colPtrs:Array[Int],rowIndexs:Array[Int])
您不能使用denseMatrix.toSparse()
?不,这是不可能的value-toSparse不是org.apache.spark.mllib.linalg.Matrix的成员
。实际上,.toLocalMatrix()
的输出似乎是一个矩阵
。即使有可能,它也不能从coo矩阵=>稠密矩阵=>稀疏矩阵得出结论。矩阵的维数太大,无法转换为稠密矩阵。您不能使用denseMatrix.toSparse()
?不,这是不可能的value-toSparse不是org.apache.spark.mllib.linalg.Matrix的成员
。实际上,.toLocalMatrix()
的输出似乎是一个矩阵
。即使有可能,它也不能从coo矩阵=>稠密矩阵=>稀疏矩阵得出结论。矩阵的维数太大,无法转化为稠密矩阵。