【发布时间】:2018-01-02 01:04:13
【问题描述】:
我遇到了 Pandas 占用过多 RAM 的问题。我有一个 5.5gb 的文件,其中有 2 列,我想简单地将所有唯一值保存在第一列中,如下所示:
Main File
Follower Friend
0 12 260009730
1 12 17568791
2 12 22512883
3 12 15808761
4 12 10135072
5 12 988
6 12 22424855
7 13 9163182
8 14 22990962
9 15 7681662
10 15 17289517
到
Result File
User
0 12
1 13
2 14
3 15
由于 RAM 限制,我以 30 个为单位导入主文件,尝试从内存中清除数据帧,并且每次仅附加结果文件。经过两次迭代(共 30 次),结果文件为 13.5mb。但它在第 6 次迭代后一直崩溃,我可以在我的进程管理中看到 python 占用了 4.5gb 的 RAM。我想打电话给垃圾收集器,但显然它不起作用,你们能帮帮我吗?我的代码如下:
i = 0
userRelation = pd.DataFrame(columns=['User'])
Location = 'file.txt'
while i < 30:
userRelationHelp = pd.DataFrame(columns=['User'])
print(str(i))
network = pd.read_csv(Location, sep="\t", header=None, encoding='Latin', low_memory=False, skiprows=(i * math.ceil(284884514/30)), nrows=(((i+1) * math.ceil(284884514/30))), names=['Follower', 'Friend'])
userRelationHelp['User'] = network['Follower'].unique()
userRelation = userRelation.append(userRelationHelp)
lst = [userRelationHelp, network]
del lst
gc.collect()
i += 1
根据我在 i += 1 之前阅读的最后 3 行的内容,应该可以从内存中清除较大的文件。每次迭代后,我可以看到我在循环开始时使用的 RAM 不断增加约 200mb,并且在循环期间,每次运行都会增加更多。
运行上述代码之前的基本 Python RAM 使用情况: 76mb
循环开始时 Python RAM 的近似使用率
0: 300
1: 800
2: 1000
3: 1300
循环结束时的大概 Python RAM 使用量
0: 633
1: 2000
2: 2900
3: 3700
能想象指出我在做什么或假设不正确吗?
【问题讨论】:
-
查看 read_csv()s chunksize 参数。也许是 dask