Utilities for probabilistic stream processing.
Summary
Functions
Returns a stream that probabilistically removes duplicates.
Types
Functions
@spec uniq(Enumerable.t(), Talan.BloomFilter.t()) :: stream()
Returns a stream that probabilistically removes duplicates.
Its main advantage is that it doesn't store elements emitted by the stream. Instead it uses a Bloom filter for membership checks.
The stream never returns duplicate elements but it sometimes detects false-positive duplicates depending on the Bloom filter it uses. A false positive causes a unique element to be incorrectly rejected as a duplicate.
This mutates bloom_filter. Re-enumerating the returned stream may produce
different results because previously emitted elements remain recorded.
Examples
iex> list = ["a", "b", "c", "a", "b"]
iex> bloom_filter = Talan.BloomFilter.new(100_000, false_positive_probability: 0.001)
iex> Talan.Stream.uniq(list, bloom_filter) |> Enum.to_list()
["a", "b", "c"]