如何将一个scipy稀疏矩阵转换为pyspark数据框架而不调用toPandas或todense? &



我有一个大的scipy.sparse矩阵data_transformed,其大小如下:

<101772x69768 sparse matrix of type '<class 'numpy.float64'>'
with 17317540 stored elements in Compressed Sparse Row format>

我想将其转换为pyspark.DataFrame而不收集它的驱动程序。我的尝试:

  1. 按行批处理spark.createDataFrame(pd.DataFrame(np.array(data_transformed[:5].todense())))但似乎spark在推断这么多列的模式时遇到了麻烦…
  2. 按列进行批处理
data_transformed_sp_list = []
for i in tqdm(range(0, data_transformed.shape[1])):
data_transformed_sp_list.append(
spark.createDataFrame(pd.DataFrame(np.array(data_transformed[:, i].todense())))
)

,但这也是不可行的,根据tqdm:1%| | 436/69768 [01:04<2:42:39, 7.10it/s]

是否有一种优雅的方式来做到这一点?

看到矩阵是CSR,您可以尝试直接创建一个稀疏数据框架:

pd.DataFrame.sparse.from_spmatrix(data_transformed)

查看这里的文档

最新更新