apache-datasketches 0.1.1

Safe, idiomatic Rust bindings for Apache DataSketches
Documentation

apache-datasketches

Safe, idiomatic Rust bindings for Apache DataSketches, built via the cxx crate over apache-datasketches-sys.

Usage

use apache_datasketches::hll::{HllSketch, TargetHllType};

let mut sketch = HllSketch::new(12, TargetHllType::Hll4)?;
sketch.update_str("some-key");
sketch.update_u64(42);
println!("estimate: {}", sketch.get_estimate());

Merging multiple sketches with HllUnion:

use apache_datasketches::hll::{HllSketch, HllUnion, TargetHllType};

let mut sketch1 = HllSketch::new(12, TargetHllType::Hll4)?;
sketch1.update_u64(1);

let mut sketch2 = HllSketch::new(12, TargetHllType::Hll4)?;
sketch2.update_u64(2);

let mut union = HllUnion::new(12)?;
union.update_sketch(&sketch1);
union.update_sketch(&sketch2);

let result = union.get_result(TargetHllType::Hll4);
println!("union estimate: {}", result.get_estimate());

HllSketch supports serialize_compact/serialize_updatable and HllSketch::deserialize for persisting sketches. HllUnion has no serializable state of its own upstream (only its result sketch does), so HllUnion::serialize_compact/serialize_updatable serialize get_result(tgt_type) directly — to resume accumulating after deserializing, feed the deserialized HllSketch back into a new HllUnion via update_sketch.

See examples/hll.rs (cargo run -p apache-datasketches --example hll) for a complete runnable demo.

Sketch families

  • HLL (HyperLogLog) — hll feature, enabled by default (sketch + union).

License

Dual-licensed under MIT or Apache-2.0, at your option.