python读取大文件内存不够_最大限度地减少在Python中读取和写入磁盘以进行内存繁重的操作...

背景

我正在为一个计算语言学项目进行一个相当计算密集的项目,但我的问题是相当普遍的,因此我期望一个解决方案对他人也是有趣的。

要求

我必须写的这个特定程序的关键方面是它必须:

>阅读一个大的语料库(5G到30G之间,潜在的更大的东西在线)

>处理每一行的数据。

>从这个处理的数据中,构建大量的向量(这些向量中的一些的维度是≥4,000,000)。通常它正在构建数十万个这样的向量。

>这些向量必须以某种格式或其他格式保存到磁盘。

步骤1和2不难做到有效:只需使用生成器并具有数据分析管道。大问题是操作3(和连接4)

括号:技术细节

如果构建向量的实际过程影响解决方案:

对于语料库中的每一行,一个或多个向量必须更新其基本权重。

如果您根据python列表来考虑这些列表,则每一行在处理时会更新一个或多个列表(如果需要,可以创建它们),通过将这些列表的值以一个或多个索引增加一个值(可能会根据指数)。

向量不依赖于彼此,也不需要读取语料库行的顺序。

尝试解决方案

关于如何做到这一点有三个极值:

>我可以在内存中构建所有的向量。然后写入磁盘。

>我可以直接在磁盘上构建所有矢量,使用腌菜架或一些这样的库。

>我可以一次在内存中建立向量,并将其写入磁盘,每个向量通过语料库一次。

所有这些选项都是相当棘手的。 1只是占用了所有的系统内存,并且它会令人恐慌并且缓慢地爬行。 2是太慢,因为IO操作不快。由于同样的原因,3可能甚至比2慢。

目标

一个很好的解决方案将涉及:

>建立尽可能多的记忆。

>一旦内存已满,请将所有内容转储到磁盘。

>如果需要再次从磁盘中获取位,则将它们恢复到内存中以向这些向量添加东西。

>回到1,直到所有向量都建成。

问题是我不太确定如何去做。担心像RAM这样的系统属性似乎有点愚蠢,但是我不明白如何在不考虑这个问题的情况下最佳地解决这种问题。结果,我真的不知道如何开始这种事情。

有谁知道如何解决这种问题?我蟒蛇根本不是这种事情的正确语言?还是有一个简单的解决方案来最大限度地提高从内存(在原因之内)做了多少,同时最小化数据必须从磁盘读取多少次,或者写入它?

非常感谢您的关注。我期待着看到stackoverflow的明亮的头脑可以抛出我的方式。

额外细节

运行这个问题的机器通常有20个内核和〜70G的RAM。该问题可以并行化(MapReduce),因为一个实体的单独向量可以从语料库的段中构建,然后添加以获得从整个语料库构建的向量。

问题的一部分是确定在需要进行磁盘写入之前可以在内存中建立多少内存的限制。 python是否提供任何机制来确定有多少RAM?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值