【问题标题】:Create sparse RDD from scipy sparse matrix从 scipy 稀疏矩阵创建稀疏 RDD
【发布时间】:2017-03-31 10:34:08
【问题描述】:

我有一个来自 scipy 的大型稀疏矩阵(300k x 100k,所有二进制值,大部分为零)。我想将此矩阵的行设置为 RDD,然后对这些行进行一些计算 - 在每一行上评估一个函数,在成对的行上评估函数等。

关键是它非常稀疏,我不想爆炸集群 - 我可以将行转换为 SparseVectors 吗?或者也许将整个东西转换为 SparseMatrix?

你能举一个例子,你读入一个稀疏数组,将行设置成一个 RDD,然后从这些行的笛卡尔积中计算一些东西吗?

【问题讨论】:

  • 尝试使用pyspark
  • @EliSadoff 我正在使用 pyspark,问题是我不知道要使用哪些对象或如何设置它们。
  • 啊,我没有意识到这一点。我以为你想弄清楚如何从 python 到 scala。

标签: python numpy apache-spark scipy pyspark


【解决方案1】:

我最近遇到了这个问题-我认为您可以通过使用 scipy csc_matrix 属性构造 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)

【讨论】:

    【解决方案2】:

    你只需要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'>
    

    【讨论】:

    • 对,但是这会将行编码为稀疏向量吗?
    • 我不这么认为。在toarray()之后,变成了ndarray。
    • 我担心的是,将它作为密集数组存储在 RDD 的每个条目中会浪费空间——我可以自动将 scipy 稀疏矩阵转换为 PySpark 中的稀疏存储类之一吗?跨度>
    • 我知道您的担忧,但到目前为止,将 scipy 稀疏矩阵直接转换为 spark 稀疏矩阵似乎没有更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2017-07-21
    • 2011-11-28
    相关资源
    最近更新 更多