我有一个大的scipy.sparse
矩阵data_transformed
,其大小如下:
<101772x69768 sparse matrix of type '<class 'numpy.float64'>'
with 17317540 stored elements in Compressed Sparse Row format>
我想将其转换为pyspark.DataFrame
而不收集它的驱动程序。我的尝试:
- 按行批处理
spark.createDataFrame(pd.DataFrame(np.array(data_transformed[:5].todense())))
但似乎spark
在推断这么多列的模式时遇到了麻烦… - 按列进行批处理
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)
查看这里的文档