gpt4 book ai didi

python - 在 Python 中使用命名元组字典导致内存不足

转载 作者:太空宇宙 更新时间:2023-11-03 17:04:13 26 4
gpt4 key购买 nike

我有一组问题,我希望能够回答这些问题,而不必使用 SQL 来回答它们。当我决定在 Python 中进行树遍历更容易时,我在查询中进行了大约 9 个子选择。

问题是,当我尝试使用 Python 将我关心的所有数据(32 亿行)获取到我的机器时,内存不足。

from collections import namedtuple, defaultdict

state_change = namedtuple("state_change", ["event", "phase", "datetime"])

sql = """
SELECT *
FROM job_history
WHERE job = 'job_name'"""

# Now we need to assosciate job states, and times.
jobs = defaultdict(list) # Key is the job id, list of state changes

for row in get_media_scan_data(sql):
jobs[row[7]].append(state_change(
row[8],
row[10],
row[5],))

单个行看起来像

datetime                job         job_id  event               impact_policy   phase
2000-06-10 08:44:04.000 job_name 4165 begin inode verify NULL 4

此问题的一个解决方案是在数据窗口上进行计算。比如说前 200,000 行,然后是 200,001 到 400,000 行,等等。

是否有一种更有效的内存方式来在本地存储这些数据?如果我可以避免多次重新下载数据集(使用 Windows),这将节省大量时间。

最佳答案

对于数十亿行,您显然需要某种磁盘持久性。看看bsddb模块,它是一个非常快速的嵌入式键值存储。一个小例子(注意在 python 3 上存储值的一种奇怪的方式):

import bsddb3.db as db
def bsdtest():
d = db.DB()
d.open('test.db', dbtype=db.DB_HASH, flags=db.DB_CREATE)
# d.exists()
for key in range(1000000):
d.put(bytes(str(key), encoding='ascii'),
bytes(str('value'), encoding='ascii'))
d.close()

关于python - 在 Python 中使用命名元组字典导致内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com