2016-05-24 7 views
3

Ich verwende die ALS-Implementierung in mllib (in Scala), um Produktempfehlungen für eine Gruppe von Benutzern zu generieren. Meine ALS-Implementierung funktioniert gut und generiert Bewertungen. Ich habe die Zeile:ML lib Empfehlungen zu Textdatei schreiben

val recs = model.recommendProductsForUsers(20) 

, um ein Array von 20 Produktempfehlungen für jeden Benutzer zu erstellen. Dies funktioniert gut und die Ratings wie folgt aussehen: (96, Array (Rating (96,61,1.0889034936577194E-8), Bewertung (96,274,7.364985542945079E-9) ..)

dh es als Array aufgebaut ist [ . (Int, Array [org.apache.spark.mllib.recommendation.Rating])]

ich diese Empfehlungen in eine Textdatei schreiben, muss ich habe versucht:

recs.saveAsTextFile("./testoutput") 

und diese läuft aber die Ausgabe ist nicht die Zahlen, die ich brauche, sondern stattdessen sieht aus wie es eine Art von Objekt ist (und nicht der Text im Inneren des Objekts)

(87, [Lorg.apache.spark.mllib.recommendation.Rating; @ 28ccda46)

Ich weiß, dass ich Karten verwenden muss, um das Rating-Objekt in ein Textobjekt zu konvertieren, aber ich kann keine Kombination von Karten zu erhalten funktionieren richtig.Ich denke, dieses Problem ist eine etwas komplexere Version von - aber die vorgeschlagene Lösung funktioniert nicht für mich, weil ich mit mehreren Benutzern zu tun habe.

Antwort

2

Es gibt ein paar Möglichkeiten, dies einschließlich der Erstellung von Ausgabestrings manuell lösen kann:

recs.mapValues(_.mkString(",")).saveAsTextFile(somePath) 

oder Umwandlung in einheitlichem Scala Typ wie List oder Vector:

recs.mapValues(_.toVector).saveAsTextFile(somePath) 
+0

Vielen Dank! Ich denke, der Schlüssel war mapValues ​​anstatt nur Karte. Beide Antworten funktionieren wunderbar für mich. – clairekelley

+0

Gern geschehen. Es könnte auch mit 'map' gemacht werden. 'mapValues' macht es nur kürzer. Das Hauptproblem ist wirklich Java - Scala Interop. BTW Bitte vergessen Sie nicht [die Antwort zu akzeptieren] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – zero323