2017-08-07 1 views
1

Gegebene Ergebnisse aus dem PräfixSpan-Modell generiert, Wie werden alle Ergebnisse in Dateien mit sortierter Reihenfolge nach Häufigkeit gespeichert? Die Datenstruktur des Ergebnisses kann die saveAsTextFile-Funktion nicht direkt unterstützen.Wie speichern Sie PräfixSpan Ergebnisse in Dateien mit Scala?

result = model.freqSequences().collect() 
print result 
for fs in result: 
    print('{}, {}'.format(fs.sequence,fs.freq)) 

Die erwarteten Ergebnisse sind so etwas wie:

[[20],[3]], 8,11.42% 
[[7]], 6,8.57% 
[[13]], 2,2.85% 
+0

Sie diese getaggt mit Scala, aber Ihr Code sieht eher aus wie 'python' .. –

+0

ja, ich kopiert Pytho n Code, aber bevorzugte Scala-Lösung. Vielen Dank! – icecream

Antwort

0

Wenn Sie nur die freqSequences speichern möchten, einfach nicht nennen collect an diesem RDD und Sie es in einer Textdatei speichern können:

model.freqSequences().saveAsTextFile("path") 

jedoch, die vielleicht nicht so nützlich sein, da sie das Ergebnis der toString auf jedem sparen von die RDD-Datensätze (vom Typ PrefixSpan.FreqSequence[Item]), die später möglicherweise nicht so einfach geparst werden. Also - Sie diese Datensätze in Strings formatieren können selbst sie in einem Format zu schreiben, können Sie verwenden:

// Format an array using brackets, if that's how you want it; 
// You can implement whatever format you want... 
def format[T](t: T): String = t match { 
    case a: Array[_] => a.map(t => s"[${format(t)}]").mkString(",") 
    case _ => t.toString 
} 

model.freqSequences() 
    .map(fs => s"${format(fs.sequence)}, ${fs.freq}") 
    .saveAsTextFile("path") 

Schließlich, wenn Sie diese Ergebnisse, um sind Speicher dieses Modell anzuwenden Funken mit später, mit save direkt betrachten:

model.save(sc, "path") 

, die später unter Verwendung geladen werden können:

PrefixSpanModel.load(sc, "path") 
+0

Ich muss die gesammelten Daten für die Verarbeitung im nächsten Schritt speichern, anstatt das Modell zu speichern. Sobald die Ergebnisse gesammelt sind, funktioniert saveAsTextFile in diesem Fall nicht. model.freqSequences(). SaveAsTextFile ("Pfad") ist für mich nicht nützlich, da ich Daten für den folgenden Schritt analysieren muss. Derzeit verwende ich einfach foreach-Funktion, um jedes Ergebnis in Dateien mit Java.io zu speichern. aber ich bin mir nicht sicher, ob es eine bessere Praxis gibt. – icecream

+0

"' model.freqSequences(). SaveAsTextFile ("Pfad") 'ist nicht nützlich für mich, da ich Daten für den folgenden Schritt analysieren muss" - können Sie klären? Warum ist das nicht nützlich? Liegt es daran, dass Sie das _format_ der geschriebenen Datensätze kontrollieren wollen? –

+0

aktualisiert die Antwort unter der Annahme, dass das Problem ist - hoffe, dies hilft –

Verwandte Themen