2017-11-14 1 views
0

Ich lese Datenstrom in meiner Spark-Anwendung aus Kafka-Stream. Meine Anforderung besteht darin, eine Produktempfehlung für einen Benutzer zu erstellen, wenn er eine Anfrage stellt (suchen/browsen usw.).Funken Anwendung von Kafka-Stream dauert lange Zeit, um Empfehlung

Ich habe bereits ein geschultes Modell mit Benutzerzahlen. Ich benutze Java und org.apache.spark.mllib.recommendation.MatrixFactorizationModel Modell, um das Modell einmal zu Beginn meiner Spark-Anwendung zu lesen. Wann immer es ein Browsereignis gibt, rufe ich die recommendProducts (user_id, num_of_recommended_products) API auf, um eine Empfehlung für einen Benutzer aus meinem bereits vorhandenen trainierten Modell zu erstellen.

Diese API dauert ~ 3-5 Sekunden für die Generierung von Ergebnis pro Benutzer, die sehr langsam ist und daher meine Stream-Verarbeitung hinterherhinkt. Gibt es irgendwelche Möglichkeiten, wie ich die Zeit dieser API optimieren kann? Ich erwäge eine Erhöhung der Stream-Dauer von 15 Sekunden auf 1 Minute als eine Optimierung (nicht sicher von seinen Ergebnissen jetzt) ​​

Antwort

1

Calling recommendProducts in Echtzeit, macht nicht viel Sinn. Da das ALS-Modell Vorhersagen nur für Benutzer treffen kann, was im Trainingsdatensatz gesehen wurde, ist es besser, die Ausgabe einmal in einem Speicher zu speichern, der die ersten Nachschlagevorgänge nach Schlüssel unterstützt, und die Ergebnisse von dort bei Bedarf abzurufen.

Wenn das Hinzufügen von Speicher-Layer keine Option ist, können Sie auch die Ausgabe von recommendProductsForUser, Partitionierung nach ID, Prüfpunkt- und Cache-Vorhersagen und dann join mit Eingabestream nach ID vornehmen.

Verwandte Themen