Talan.Stream (talan v1.0.0)

Copy Markdown View Source

Utilities for probabilistic stream processing.

Summary

Functions

Returns a stream that probabilistically removes duplicates.

Types

stream()

@type stream() :: %Stream{accs: term(), done: term(), enum: term(), funs: term()}

Functions

uniq(enum, bloom_filter)

@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"]