我正在尝试在具有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编写一些有效的代码来解决此问题。
请帮助我解决这个问题。
此问题的简单解决方案之一可能是不将数据存储在列表中。您可以在进行读取的同时尝试将这些数据写入文件。