用32GB的RAM分析80GB文件中的巨大数据集

2024-04-20 06:55:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有非常大的文本文件(大约80G)。文件只包含数字(整数+浮点数),有20列。现在我要分析每一列。通过分析,我的意思是,我必须对每一列做一些基本的计算,比如求平均值,绘制直方图,检查条件是否满足等

with open(filename) as original_file:
        all_rows = [[float(digit) for digit in line.split()] for line in original_file]
    all_rows = np.asarray(all_rows)

在此之后,我将对特定列进行所有分析。我使用'good'配置服务器/工作站(带有32GB的RAM)来执行我的程序。问题是我不能完成我的工作。我等了差不多一天才完成那个程序,但一天后它还在运行。后来我不得不手动杀死它。我知道我的脚本是正确的,没有任何错误,因为我在较小的文件(大约1G)上尝试过相同的脚本,它工作得很好。在

我的初步猜测是它会有一些记忆问题。我有什么办法可以做这样的工作吗?不同的方法还是其他方法?在

我尝试将文件拆分成更小的文件大小,然后在循环中逐个分析它们,如下所示

^{pr2}$

我已经在一堆小文件上测试了上面的代码,它工作得很好。不过,同样的问题,当我使用在大文件。有什么建议吗?有其他更干净的方法吗?在


Tags: 文件方法in程序脚本forline数字
2条回答

我想到了两种选择:

  • 您应该考虑通过online algorithms执行计算

    In computer science, an online algorithm is one that can process its input piece-by-piece in a serial fashion, i.e., in the order that the input is fed to the algorithm, without having the entire input available from the start.

    可以用这种方法以恒定的内存复杂度计算带有预先指定的存储单元的mean and variancehistogram

  • 您应该将数据放入适当的数据库中,并利用该数据库系统的统计和数据处理功能,例如aggregate functionsindexes。在

    随机链接:

对于如此冗长的操作(当数据不适合内存时),使用dask(http://dask.pydata.org/en/latest/)之类的库,尤其是{}来读取数据,然后像在pandas library(另一个有用的包)中那样执行操作可能会很有用。在

相关问题 更多 >