处理大数据时创建哈希表

时间:2018-12-07 08:30:37

标签: python pyspark multiprocessing bigdata ram

我有一个文本文件,其中包含110,000,000行密码(2.5 gig)。任务是提出一个哈希函数,以创建最小的冲突。该文件已具有1000万个重复项(定义:具有相似哈希值(AABB = BBAA)的相似密码)。

我想出了这段代码,但是我无法运行它。我的电脑有8 GB的Ram。

这是我的代码:

data = 110000000
hash_table_size = int((30*data))/100)
hash_table = {i:[] for i in range(hash_table_size)}
with open('passwords2.txt') as file:
    sum_ = 0
    k = 3000
    index_ = 0
    for password in tqdm(file):
        password = ''.join(sorted(password))
        for character in password:
            ascii_value = ord(character) 
            sum_ += (ascii_value + k)*i
            index_ =  sum%hash_table_size
        hash_table[index_] = password  

这计算了碰撞次数

length_ = 0
for i in range(hash_table_size):
    if len(hash_table[i]) !=1
       length_ += len(hash_table[i])

我试图在Windows上的pycharm中运行此代码,但是我的系统变得非常缓慢,无法再使用它了。我还尝试在装有4 gig Ram的虚拟机上的ubuntu上运行它,再次没有响应。

我不知道如何改进此代码。我的第一个策略是使用with open() as file:,所以我不会一次将所有内容读到内存中。但是稍后我需要创建一个hash_table,尽管我仅获得30%的行作为我的大小,但同样会出现内存问题。我有什么建议吗? 我很感激。

P.s。我也用pyspark尝试过。地图部分工作正常,但缩小部分占用了我所有的内存。

0 个答案:

没有答案