Ich möchte eine Reihe von Werten, die zu einer bestimmten Kategorie gehören, zu einer HLL-Datenstruktur zusammenfassen, damit ich später Kreuzungen und Vereinigungen durchführen und zählen kann Kardinalität solcher Berechnungen.Wie verwende ich HyperLogLogMonoid von Algebird, um willkürliche Kreuzungen und Vereinigungen auszuführen
konnte ich den Punkt kommen, wo ich Kardinalität für jede Gruppe
die com.twitter.algebird.HyperLogLogAggregator mit schätzenich helfen com.twitter.algebird.HyperLogLogMonoid verwenden, müssen als HLL zu speichern und dann später verwenden, um Kreuzungen/Vereinigungen zu berechnen.
val lines_parsed = lines.map { line => parseBlueKaiLogEntry(line) } # (uuid, [category id array]) val lines_parsed_flat = lines_parsed.flatMap { case(uuid, category_list) => category_list.toList.map { category_id => (category_id, uuid) } } # (category_id, uuid) # Group by category val lines_parsed_grped = lines_parsed_flat.groupBy { case (cat_id, uuid) => cat_id } # Define HLL aggregator val hll_uniq = HyperLogLogAggregator.sizeAggregator(bits=12).composePrepare[(String, String)]{case(cat_id, uuid) => uuid.toString.getBytes("UTF-8")} # Aggregate using hll count lines_parsed_grped.aggregate(hll_uniq).dump # (category_id, count) - expected output
Jetzt versuche ich HLL Monoid
# I now want to store as HLL and this is where I'm not sure what to do # Create HLL Monoid val hll = new HyperLogLogMonoid(bits = 12) val lines_grped_hll = lines_parsed_grped.mapValues { case(cat_id:String, uuid:String) => uuid}.values.map {v:String => hll.create(v.getBytes("UTF-8"))} # Calling dump results in a lot more lines that I expect to see lines_grped_hll.dump
Was mache ich hier wringen zu benutzen?
Welche Art von Ergebnis Sie erwartet hatten? Gesamtsumme der Katzen nach Ids gruppiert? – FaigB