我有一个CSV文件,其中一列包含数十亿条记录,从该文件中删除重复记录的最快方法是什么?
答案 0 :(得分:1)
逐行读取文件。创建每行的哈希,如果该哈希在以前的哈希集中,则丢弃该行,否则将哈希添加到该集合中,并将该行存储到输出文件中。
这是代码。它一次处理输入的一行,但是需要存储一组哈希值,这些哈希值将随着唯一行的数量线性增长:
PostgreSQL 10.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 6.4.0) 6.4.0, 64-bit
替代方法:
您可以使用GZ-Sort对大文件进行排序,然后使用uniq命令轻松删除任何相邻的重复行。
答案 1 :(得分:0)
使用熊猫要简单得多,请详细了解drop_duplicates here
import pandas as pd
df = pd.DataFrame({"A":["cake", "cake", "icecream", "cheese"], "B":[0,6,6,6], "C":["A","A","B","A"]})
print(df)
A B C
0 cake 0 A
1 cake 6 A
2 icecream 6 B
3 cake 6 A
然后我们就放下假面并设置keep=false.
df.drop_duplicates(subset=['A', 'C'], keep=False)
print(df)
A B C
2 icecream 6 B
3 cake 6 A
答案 2 :(得分:0)
我会考虑两种方法:
如果您可以将整个文件插入内存,只需使用set
。
否则,如果输入文件大于可用内存,则创建一个sqlite数据库,设置一个具有唯一列约束的表,然后将数据插入该表中。使用executemany以获得最佳性能