私はスパークメッセージを検出するためにSpark Multilayer Perceptron Classifierを訓練し、Play Frameworkと組み合わせてWebサービスで使用したいと考えています。埋め込みスパーククラスタを使用しないSpala MLモデルの統合
私のソリューション(下記参照)は、組み込みローカルスパーククラスタを生成し、モデルをロードし、メッセージを分類します。埋め込まれたSparkクラスタを使用せずにモデルを使用する方法はありますか?
Sparkには、Play Frameworkの依存関係といくつかの依存関係があります。埋め込まれたスパーククラスターを起動することなく、分類モードでモデルを実行する方法があると思いました。
私の2番目の質問は、1つのメッセージをDataFrameに入れずに分類できるかどうかです。
アプリケーションローダ:
lazy val sparkSession: SparkSession = {
val conf: SparkConf = new SparkConf()
.setMaster("local[*]")
.setAppName("Classifier")
.set("spark.ui.enabled", "false")
val session = SparkSession.builder()
.config(conf)
.getOrCreate()
applicationLifecycle.addStopHook {() ⇒
Future { session.stop() }
}
session
}
lazy val model: PipelineModel = {
sparkSession
CrossValidatorModel.load("mpc-model").bestModel.asInstanceOf[PipelineModel]
}
分類サービス(モデルおよび火花セッションが注入される):
val messageDto = Seq(MessageSparkDto(
sender = message.sender.email.value,
text = featureTransformer.cleanText(text).value,
messagelength = text.value.length,
isMultimail = featureTransformer.isMultimail(message.sender.email),
))
val messageDf = messageDto.toDS()
model.transform(messageDf).head().getAs[Double]("prediction") match {
case 1.0 ⇒ MessageEvaluationResult(MessageClass.Spam)
case _ ⇒ MessageEvaluationResult(MessageClass.NonSpam)
}
編集:としては、コメント欄で指摘し、一つの解決策は、可能性モデルをPMMLに変換し、別のエンジンを使用してモデルをロードし、分類に使用することができます。これはあまりにもオーバーヘッドのように私にも聞こえる。 ML分類器を使用するために最小限のオーバーヘッドと依存性でローカルモードでスパークを実行する経験がありますか?