Skip to main content
Help improve this documentation

This documentation is still new and evolving. If you spot any mistakes, unclear explanations, or missing details, please open an issue.

Your feedback helps us improve!

Hyperloglog operatorsโ€‹

This page lists all operators available in the hyperloglog sub-package of ro.

Installโ€‹

First, import the sub-package in your project:

go get -u github.com/samber/ro/plugins/hyperloglog
  • Estimates the number of distinct items in a stream using HyperLogLog algorithm.

    import (
    "github.com/samber/ro"
    rohyperloglog "github.com/samber/ro/plugins/hyperloglog"
    "github.com/cloudfoundry/gosigar"
    )

    obs := ro.Pipe[string, uint64](
    ro.Just(
    "apple", "banana", "apple", "orange", "banana",
    "grape", "apple", "kiwi", "orange", "mango",
    ),
    rohyperloglog.CountDistinct(14, false, func(s string) uint64 {
    return gosigar.Sum64(s)
    }),
    )

    sub := obs.Subscribe(ro.PrintObserver[uint64]())
    defer sub.Unsubscribe()

    // Next: 6
    // Completed
    Prototype:
    func CountDistinct[T comparable](precision uint8, sparse bool, hashFunc func(input T) uint64)
  • Emits running distinct count estimates for each item in the stream.

    import (
    "hash/fnv"
    "github.com/samber/ro"
    rohyperloglog "github.com/samber/ro/plugins/hyperloglog"
    )

    obs := ro.Pipe[string, uint64](
    ro.Just(
    "apple", "banana", "apple", "orange", "banana",
    "grape", "apple", "kiwi", "orange", "mango",
    ),
    rohyperloglog.CountDistinctReduce(14, false, func(s string) uint64 {
    h := fnv.New64a()
    h.Write([]byte(s))
    return h.Sum64()
    }),
    )

    sub := obs.Subscribe(ro.PrintObserver[uint64]())
    defer sub.Unsubscribe()

    // Next: 1
    // Next: 2
    // Next: 2
    // Next: 3
    // Next: 3
    // Next: 4
    // Next: 4
    // Next: 5
    // Next: 5
    // Next: 6
    // Completed
    Prototype:
    func CountDistinctReduce[T comparable](precision uint8, sparse bool, hashFunc func(input T) uint64)