python布隆过滤器的使用的与操作详细介绍
布隆过滤器:
布隆过滤器是一种概率空间高效的数据结构。它与hashmap非常相似,用于检索一个元素是否在一个集合中。它在检索元素是否存在时,能很好地取舍空间使用率与误报比例。正是由于这个特性,它被称作概率性数据结构
首先,需要将布隆过滤器相关模块安装:
1.pip3 install pybloom_live(直接打开命令提示符即可安装)
2.pip3 install bitarray-0.8.1-cp36-cp36m-win_amd64.whl(pybloom_live依赖这个包,需要先安装)下面给出安装地址:pybloom_live地址
安装之后我们详细介绍其相关用法:
首先我们调用此模块:
from pybloom_live import ScalableBloomFilter
例如:给出如下相关例子:
from pybloom_live import ScalableBloomFilter
sbf = ScalableBloomFilter(initial_capacity=100, error_rate=0.001, mode=ScalableBloomFilter.LARGE_SET_GROWTH)
c=[1,2,3,4,5]
for i in c:
sbf.add(i)
print( 6 in sbf)
输出为False
即我们将列表c的相关内容遍历到布隆过滤器,然后判断6是否在其中(Bloom Filter仅仅维护一个m位的BitArray(位数组),最开始m位全部为零。不断记录元素(如已经抓取的url),也仅仅是m位的BitSet中有些位置由0置成1的过程。此外,Bloom Filter需要K个不同的hash函数,并且每个hash函数的结果要是在0~m-1范围的,因为我们要把每一个hash函数的结果i映射到位数租的第i位上去。
当我们添加如下代码时:sbf.add(6) print( 6 in sbf)
此时输出为:True
下面 我给出一段较长代码:(详细介绍)
from pybloom_live import ScalableBloomFilter
import os
import json
sbf = ScalableBloomFilter(initial_capacity=100, error_rate=0.001, mode=ScalableBloomFilter.LARGE_SET_GROWTH)
d=[]
Dect=[{"第一个":1,"第二个":"一"},{"第一个":2,"第二个":"二"},{"第一个":3,"第二个":"三"}]
with open("E:\\cihu_new.json", "w+", encoding='utf-8_sig')as f:
json.dump(Dect, f, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False)
f = os.path.exists("E:\\cihu_new.json")
if f == True:
with open("E:\\cihu_new.json", "r+",encoding="utf-8_sig")as f:
data = json.load(f)
print(data)
for i in data:
i=i["第一个"]
print(i)
sbf.add(i)
print(3 in sbf)
print(4 in sbf)
for i in data:
i = i["第二个"]
print(i)
sbf.add(i)
print("三" in sbf)
x="我校潘继承"
if x not in sbf:
sbf.add(x)
print(x in sbf)
输出如下:
[{'第一个': 1, '第二个': '一'}, {'第一个': 2, '第二个': '二'}, {'第一个': 3, '第二个': '三'}]
1
2
3
True
False
一
二
三
True
True
大家可以根据代码自行理解,当我们处理数据庞大时,需要布隆过滤器来支持我们的操作,减少时间的消耗!
上述为我的理解。