override def prepare()

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)
    }