Skip to content

Instantly share code, notes, and snippets.

@mostafam
Created August 13, 2020 08:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mostafam/2a2fe4b4e7701bb38abe9e32e0634ff1 to your computer and use it in GitHub Desktop.
Save mostafam/2a2fe4b4e7701bb38abe9e32e0634ff1 to your computer and use it in GitHub Desktop.
StringChecker.scala (MLeap side)
package ml.combust.mleap.runtime.transformer.feature
import ml.combust.mleap.core.feature.StringCheckerModel
import ml.combust.mleap.core.types._
import ml.combust.mleap.runtime.frame.{FrameBuilder, Row, Transformer}
import ml.combust.mleap.runtime.function.{StructSelector, UserDefinedFunction}
import scala.util.Try
/**
* Created by mostafam on 6/30/20.
*/
case class StringChecker(override val uid: String = Transformer.uniqueName("string_checker"),
override val shape: NodeShape,
override val model: StringCheckerModel) extends Transformer {
val exec: UserDefinedFunction = UserDefinedFunction(
(values: Row) => model(values.toSeq(0).asInstanceOf[String], values.toSeq(1).asInstanceOf[String]): Double,
outputSchema.fields.head.dataType,
Seq(SchemaSpec(inputSchema)))
val outputCol: String = outputSchema.fields.head.name
val inputCols: Seq[String] = inputSchema.fields.map(_.name)
private val inputSelector: StructSelector = StructSelector(inputCols)
override def transform[TB <: FrameBuilder[TB]](builder: TB): Try[TB] = {
builder.withColumn(outputCol, inputSelector)(exec)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment