我有两个或多个被联合的HLLs,我想得到联合的交集计数。我使用了这里的例子hll-python example以下是我的代码
ops = [hll_ops.hll_get_union(HLL_BIN, records)]
_, _, result1 = client.operate(getKey(value), ops)
ops = [hll_ops.hll_get_union(HLL_BIN, records2)]
_, _, result2 = client.operate(getKey(value2), ops)
ops = [hll_ops.hll_get_intersect_count(HLL_BIN, [result1[HLL_BIN]] + [result2[HLL_BIN]])]
_, _, resultVal = client.operate(getKey(value), ops)
print(f'intersectAll={resultVal}')
_, _, resultVal2 = client.operate(getKey(value2), ops)
print(f'intersectAll={resultVal2}')
当我使用hll_get_intersect_count
为交集使用不同的键时,我得到了2个不同的结果,即resultVal和resultVal2不相同。这在使用函数hll_get_union_count
进行联合计数的情况下不会发生。理想情况下,交集的值应该相同。
有谁能告诉我为什么会发生这种情况,什么是正确的做法?
1条答案
按热度按时间8aqjt8rx1#
能够找出解决方案(在Aerospike支持的帮助下,同样的问题被张贴在这里,并进行了更详细的讨论aerospike forum)。
发布我的代码为其他人有同样的问题。
Aerospike中不支持HLL的交集。但是,如果要获得多个HLL的交集,我必须将一个并集保存到Aerospike中,然后获得一个与并集的其余部分的交集计数。我们在
client.operate
函数中为hll_get_intersect_count
提供的键用于获得与并集的交集。下面是我编写的代码
有关更多参考,可以在此处查找hll_set_union reference。
更多详细讨论可在此处找到