python - 从 scipy 稀疏矩阵创建稀疏 RDD

标签 python numpy apache-spark scipy pyspark

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

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

您能否举例说明您读取稀疏数组,将行设置到 RDD 中,然后根据这些行的笛卡尔积进行计算?

最佳答案

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

关于python - 从 scipy 稀疏矩阵创建稀疏 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645498/

相关文章:

python - 将 numpy 数组分成两部分

python - 在 Pandas 中使用多索引设置值

python - 在 Cython 中创建不等长的 numpy.ndarray 列表

python - 将nan值转换为零

java - 使用 clojure 通过 java 互操作从数据集对象调用 groupBy 方法

scala - 统计Spark中UDF的调用次数

python - 使用 PySpark 从 Amazon S3 读取文本文件

Python 类似于 Tomcat 和另一个 Servlet 容器

python - 如何对 x-y 坐标列表进行排序

python - 有效地改变numpy数组的顺序