单个文本文件,大小 11G ,数据总量 6000 万左右,去重后约 4000 万,去重的依据是 md5 值列。
首先尝试的方法是:建立 md5 的唯一索引, load data infile 语句导入,跑了一个晚上没跑完。 后来取 md5 的前三位进行判断,把不重复的数据写到新的文本文件,去掉唯一索引,再次用 load data infile 语句导入,共计( 10 + 8 = 18 分钟)。
代码大致如下,问题是,这段代码运行后会把 6G 内存全部用完(系统 1G , python 占用 5G ),想问下怎么会占用这么多内存?
import time
start_time = time.time()
lines = []
md5s = {}
for x in 'abcdef1234567890':
for y in 'abcdef1234567890':
for z in 'abcdef1234567890':
md5s[x + y + z] = set()
with open('files.txt', 'r', encoding = 'utf-8') as f:
for i, line in enumerate(f):
try:
if i % 10000 == 0:
print(i)
md5 = line.split('|')[3]
key = md5[:3]
if md5 not in md5s[key]:
md5s[key].add(md5)
lines.append(line)
if len(lines) > 10000:
with open('new.txt', 'a', encoding = 'utf-8') as f:
f.write(''.join(lines))
lines = []
except Exception as e:
print(e)
print(line)
with open('new.txt', 'a', encoding = 'utf-8') as f:
f.write(''.join(lines))
lines = []
print((time.time() - start_time) / 60)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.