Я хочу объединить два отдельных результата в один результат.
Мой первый результат - это itemcore из первого алгоритма:
PredictedResult(List(ItemScore(140849,0.6259532295250041,0.0,0.0,0.0)),List())
Мой второй результат - оценка правила по второму алгоритму:
PredictedResult(List(),List(Rule(Set(140855),List(ItemScore(368788,0.0,1.3516984090509725E-5,0.1111111111111111,38.59207094418362)))))
Вы видите, что первый результат имеет пустой список. Этот список заполняется во втором результате. Это также относится к количеству предметов, только наоборот.
Класс обслуживания принимает только один из двух результатов, но не комбинируется.
Serving.scala:
package org.template
import org.apache.predictionio.controller.LServing
class Serving
extends LServing[Query, PredictedResult] {
override
def serve(query: Query,
predictedResults: Seq[PredictedResult]): PredictedResult = {
println(predictedResults(0))
println(predictedResults(1))
// Returning
predictedResults(0)
}
}
Engine.json:
package org.template
import org.apache.predictionio.controller.EngineFactory
import org.apache.predictionio.controller.Engine
// Query most similar (top num) items to the given
case class Query(items: Set[String], num: Int) extends Serializable
case class PredictedResult(itemScores: List[ItemScore], rules: List[Rule])
case class Rule(cond: Set[String], itemScores: List[ItemScore])
extends Serializable
case class ItemScore(item: String, score: Double, support: Double, confidence: Double, lift: Double) extends Serializable with
Ordered[ItemScore] {
def compare(that: ItemScore) = this.score.compare(that.score)
}
Когда я нажимаю на запрос, теперь я получаю только один результат:
{"itemScores":[{"item":"140849","score":0.6259532295250041,"support":0.0,"confidence":0.0,"lift":0.0}],"rules":[]}
Ожидаемый результат (ItemScore из алгоритма1 в сочетании с Правилом из алгоритма2):
PredictedResult(List(ItemScore(140849,0.6259532295250041,0.0,0.0,0.0)),List(Rule(Set(140855),List(ItemScore(368788,0.0,1.3516984090509725E-5,0.1111111111111111,38.59207094418362)))))