override def prepare()

in core/src/main/scala/com/spotify/featran/transformers/NHotWeightedEncoder.scala [81:117]


  override def prepare(a: Seq[WeightedLabel]): Set[String] =
    Set(a.map(_.name): _*)
  override def buildFeatures(
    a: Option[Seq[WeightedLabel]],
    c: SortedMap[String, Int],
    fb: FeatureBuilder[_]
  ): Unit = a match {
    case Some(xs) =>
      val weights = MMap.empty[String, Double].withDefaultValue(0.0)
      xs.foreach(x => weights(x.name) += x.value)
      var unseenWeight = 0.0

      val keys = weights.keySet.toList.sorted
      var prev = -1
      val unseen = MSet[String]()
      keys.foreach { key =>
        c.get(key) match {
          case Some(curr) =>
            val gap = curr - prev - 1
            if (gap > 0) fb.skip(gap)
            fb.add(name + '_' + key, weights(key))
            prev = curr
          case None =>
            unseen += key
            unseenWeight += weights(key)
        }
      }
      val gap = c.size - prev - 1
      if (gap > 0) fb.skip(gap)
      if (encodeMissingValue) {
        addMissingValue(fb, unseen, keys, unseenWeight)
      }
      if (unseen.nonEmpty) {
        fb.reject(this, FeatureRejection.Unseen(unseen.toSet))
      }
    case None => addMissingItem(c, fb)
  }