即使在Vaex和内存崩溃中,将sparsematrix转换为hdf5也需要花费大量时间

问题描述

我有一个包含文本数据和数字特征的数据框。我已经对文本数据进行了矢量化处理,并计划将其与其余数字数据连接起来,以便在机器学习算法上运行。

我已经使用TIDF对文本数据进行了矢量化处理,如下所示:

from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer(max_features=10000)
text_vect = vect.fit_transform(myDataframe['text_column'])
text_vect_df = pd.DataFrame.sparse.from_spmatrix(text_vect)

text_vect_df.shape:250000 x 9300

我已将text_vect_df转换为csv文件,并使用vaex将其转换为hdf5,如下所示。 Vaex必须与hdf5格式兼容。

text_vaex_hdf5 = vaex.from_csv('text_vectorized.csv',convert=True,chunk_size=5_000_000)

text_vectorized.csv是4GB。vaex.from_csv()占用了太多时间,并且内存崩溃了(8GB RAM)。

我在Jupyterhub(带有外部GPU)中尝试使用text_vect_df.shape 200000 x 9300.的形状,它分块下载,每个块有7GB的空间,读取该文件会花费太多时间。

text_vectorized.csv_chunk0.hdf5
7.51 GB
text_vectorized.csv_chunk1.hdf5
7.51 GB
text_vectorized.csv_chunk2.hdf5
2.5 GB

问题1:hdf5文件如何大于原始的csv5文件?不应该更小吗? 问题2:如果较小的大小失败/崩溃,如何存储950000 x 10000大小的数据帧?

我了解了vaex,它看起来真的很酷,因为计算在几秒钟内发生。我很乐意继续进行这项工作,但是遇到了麻烦。我已经尝试过了。不像Vaex那样酷。

已经尝试过的解决方案:

  1. Pandas的to_hdf不应用于存储稀疏矩阵,因为https://vaex.readthedocs.io/en/latest/faq.html

当使用pandas .to_hdf方法时,输出的HDF5文件具有基于行的格式。另一方面,Vaex希望使用基于列的HDF5文件

  1. 没有dask或vaex,运行KNN,SVM或任何ML算法时内存就会崩溃。
  2. 苦苦尝试,没有运气,工作人员在客户端本地群集中被杀死。
  3. 有了Vaex,无法前进

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...