in core/src/main/scala/com/spotify/featran/transformers/HashNHotWeightedEncoder.scala [89:109]
override def prepare(a: Seq[WeightedLabel]): HLL =
a.map(_.name).map(hllMonoid.toHLL(_)).fold(hllMonoid.zero)(hllMonoid.plus)
override def buildFeatures(a: Option[Seq[WeightedLabel]], c: Int, fb: FeatureBuilder[_]): Unit =
a match {
case Some(xs) =>
val weights =
new java.util.TreeMap[Int, Double]().asScala.withDefaultValue(0.0)
xs.foreach(x => weights(HashEncoder.bucket(x.name, c)) += x.value)
var prev = -1
weights.foreach { v =>
val (curr, value) = v
val gap = curr - prev - 1
if (gap > 0) fb.skip(gap)
fb.add(name + '_' + curr, value)
prev = curr
}
val gap = c - prev - 1
if (gap > 0) fb.skip(gap)
case None => fb.skip(c)
}