处理内存中的大量文本数据

问题描述 投票:1回答:1

我正在尝试在具有64 GB RAM的Ubuntu系统上处理约20GB的数据。

[此步骤是一些预处理步骤的一部分,以生成用于训练ML算法的特征向量。

最初的实现(由我的团队中的某人编写)中包含列表。由于我们添加了更多的训练数据,因此无法很好地扩展。就是这样。

all_files = glob("./Data/*.*")
file_ls = []

for fi in tqdm(all_files):
    with open(file=fi, mode="r", encoding='utf-8', errors='ignore') as f:
        file_ls.append(f.read())

这会遇到内存错误(进程被杀死)。因此,尽管我应该尝试用try替换基于列表的内容

def insert(word):
    cur_node = trie_root
    for letter in word:
        if letter in cur_node:
            cur_node = cur_node[letter] 
        else:
            cur_node[letter] = {} 
            cur_node = cur_node[letter]
    cur_node[None] = None

trie_root = {}

for fi in tqdm(all_files):
    with open(file=fi, mode="r", encoding='utf-8', errors='ignore') as f:
        insert(f.read().split())

这也被杀死。上面是我编写的演示代码,用于捕获对象的内存占用量。更糟糕的是,list的演示代码是独立运行的,但是trie的演示代码被杀死了,这使我相信这种实现比list的实现还要糟糕。

我的目标是用Python编写一些有效的代码来解决此问题。

请帮助我解决这个问题。

python algorithm data-structures bigdata
1个回答
0
投票

此问题的简单解决方案之一可能是不将数据存储在列表中。您可以在进行读取的同时尝试将这些数据写入文件。

© www.soinside.com 2019 - 2024. All rights reserved.