Ich bin neu in Spark und Scala, so dass ich einige grundlegende Dinge hier falsch verstanden haben könnte. Ich versuche Sparks word2vec Modell auf meinen eigenen Daten zu trainieren. Nach ihrem documentation, einem Weg, dies zu tun ist,Training Sparks word2vec mit einer RDD [String]
val input = sc.textFile("text8").map(line => line.split(" ").toSeq)
val word2vec = new Word2Vec()
val model = word2vec.fit(input)
Der text8
-Datensatz eine Zeile vieler Worte enthält, was bedeutet, dass input
ein RDD[Seq[String]]
werden wird.
Nach meinem eigenen Datensatz massiert, die ein Wort pro Zeile hat, mit verschiedenen map
s etc. Ich bin mit einem RDD[String]
links, aber ich kann nicht scheinen zu können, das word2vec Modell auf sich trainieren. Ich habe versucht, input.map(v => Seq(v))
, die tatsächlich eine RDD[Seq[String]]
geben, aber das wird eine Sequenz für jedes Wort geben, was ich denke, ist völlig falsch.
Wie kann ich eine Sequenz um meine Saiten wickeln, oder gibt es noch etwas, das ich verpasst habe?
EDIT
Also habe ich es irgendwie heraus. Von meiner clean
ist eine RDD[String]
Ich mache val input = sc.parallelize(Seq(clean.collect().toSeq))
. Dies gibt mir die korrekte Datenstruktur (RDD[Seq[String]]
) passend zum Word2vec-Modell. Das Ausführen von Collect auf einem großen Dataset führt jedoch zu einem Speicherfehler. Ich bin mir nicht ganz sicher, wie sie die Anpassung vorhaben. Vielleicht ist es nicht wirklich parallelisierbar. Oder vielleicht sollte ich mehrere semi-lange Sequenzen von Streichern und RDD haben, statt einer langen Sequenz wie ich jetzt?
Das ist im Grunde, was ich mache, um meine eigenen Daten vorzubereiten. Soweit ich verstehe, wird dies eine 'RDD [String]' geben, wie ich in meiner Frage geschrieben habe. Dies wird nicht funktionieren, da das Word2vec-Modell eine 'RDD [Seq [String]]' als Eingabe zu akzeptieren scheint. – burk