我有一个来自scipy的大型稀疏矩阵(300kx100k,所有二进制值,大部分为零)。我想将这个矩阵的行设置为一个RDD,然后对这些行进行一些计算-在每一行上计算一个函数,在一对行上计算函数,等等。
关键是它非常稀疏,我不想爆炸集群-我能把行转换成sparsevector吗?或者把整件事转换成Sparsematrix?
你能举一个例子,在稀疏数组中读取数据,将行设置成一个RDD,然后从这些行的笛卡尔积中计算一些数据吗?
最佳答案
我最近遇到了这个问题——我认为您可以通过构造带有scipy csc_矩阵属性的sparsematrix直接进行转换。(借用杨布莱恩)
import numpy as np
import scipy.sparse as sps
from pyspark.mllib.linalg import Matrices
# create a sparse matrix
row = np.array([0, 2, 2, 0, 1, 2])
col = np.array([0, 0, 1, 2, 2, 2])
data = np.array([1, 2, 3, 4, 5, 6])
sv = sps.csc_matrix((data, (row, col)), shape=(3, 3))
# convert to pyspark SparseMatrix
sparse_matrix = Matrices.sparse(sv.shape[0],sv.shape[1],sv.indptr,sv.indices,sv.data)