我正在尝试使用Pandas read_parquet
函数将一个相当大的Parquet文件(~2GB,约3000万行)读入我的Jupyter Notebook(在Python 3中)。我还安装了pyarrow
和fastparquet
库,read_parquet
函数将其用作Parquet文件的引擎。不幸的是,在阅读时,我的电脑似乎会冻结,最终我会收到一个错误,说内存不足(我不想重复运行代码,因为这会导致另一次冻结-我不知道逐字错误消息)。
有没有一种好方法可以在不发生这种情况的情况下将Parquet文件的某些部分写入内存?我知道Parquet文件是柱状的,可能不可能只将一部分记录存储到内存中,但如果有解决方法,或者可能在尝试读入时发现我是否做错了什么,我想可能将其拆分。
我确实有一台性能相对较弱的电脑,只有6 GB内存和i3。CPU为2.2 GHz,可使用Turbo Boost。
3条答案
按热度按时间yeotifhr1#
你需要所有的柱子吗?您可以通过加载实际使用的内存来节省内存。
第二种可能性是使用在线机器(如google colab)加载Parquet文件,然后将其保存为
hdf
。一旦您拥有了它,就可以将其分块使用。5q4ezhmt2#
你可以用Dask代替Pandas。它是建立在Pandas上的,所以有类似的API,你可能会很熟悉,而且是为了更大的数据。
https://examples.dask.org/dataframes/01-data-access.html升
cwxwcias3#
可以读取Parquet数据
这样可以减少内存占用。fastparquet和pyarrow都应该允许你这样做。
在pyarrow的情况下,iter_batchs可用于从Parquet文件读取流批。
上面的例子一次只读取1000条记录。您可以进一步将此限制为某些行组,甚至某些列,如下所示。