我有一個從scipy(300k x 100k與所有二進制值,大多爲零)大型稀疏矩陣。我想將此矩陣的行設置爲RDD,然後對這些行執行一些計算 - 評估每行上的函數,評估行對上的函數等。從scipy稀疏矩陣創建稀疏RDD
關鍵的是它很稀疏我不想爆炸集羣 - 我可以將行轉換爲SparseVectors嗎?或者也許將整個事情轉換爲SparseMatrix?
你可以舉一個例子,你在稀疏數組中讀取數據,將行設置到RDD中,並從這些行的笛卡爾乘積中計算出某些東西?
我有一個從scipy(300k x 100k與所有二進制值,大多爲零)大型稀疏矩陣。我想將此矩陣的行設置爲RDD,然後對這些行執行一些計算 - 評估每行上的函數,評估行對上的函數等。從scipy稀疏矩陣創建稀疏RDD
關鍵的是它很稀疏我不想爆炸集羣 - 我可以將行轉換爲SparseVectors嗎?或者也許將整個事情轉換爲SparseMatrix?
你可以舉一個例子,你在稀疏數組中讀取數據,將行設置到RDD中,並從這些行的笛卡爾乘積中計算出某些東西?
你要的唯一事情是toarray()
import numpy as np
import scipy.sparse as sps
# 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))
sv.toarray()
> array([[1, 0, 4],
> [0, 0, 5],
> [2, 3, 6]])
type(sv)
<class 'scipy.sparse.csc.csc_matrix'>
#read sv as RDD
sv_rdd = sc.parallelize(sv.toarray()) #transfer saprse to array
sv_rdd.collect()
> [array([1, 0, 4]), array([0, 0, 5]), array([2, 3, 6])]
type(sv_rdd)
> <class 'pyspark.rdd.RDD'>
最近,我有這個問題 - 我想你可以通過與SciPy的csc_matrix屬性構建稀疏矩陣直接轉換。 (從陽布賴恩借用)
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)
嘗試使用[pyspark](https://spark.apache.org/docs/latest/api/python/pyspark.mllib.html?highlight=sparsematrix#pyspark.mllib。 linalg.SparseMatrix)。 –
@EliSadoff我正在使用pyspark,問題是我不知道要使用哪些對象或如何設置它們。 – cgreen
啊,我沒有意識到這一點。我以爲你想弄清楚如何從python到scala。 –