2017-03-10 2 views
2

Wenn Sie auf die Funken ml/mllib Docs beziehen, beginnen sie alle von einem SVM gespeicherten Beispiel. Das ist wirklich frustrierend, da es keinen einfachen Weg zu geben scheint, von einem Standard RDD [Row] oder Dataframe (von einer "table" select) in diese Notation zu wechseln, ohne sie vorher zu speichern.Funken: Konvertieren von Datenrahmen in Svm beschriftet Punkt

Dies ist nur eine Unannehmlichkeit im Umgang mit 3 Funktionen oder so, aber wenn Sie das auf viele, viele Funktionen skalieren, bedeutet dies, dass Sie eine Menge tippen und suchen werden.

endete ich mit so etwas wie dies oben: (wobei „Zug“ ist eine zufällige Aufteilung eines Datensatzes w/Funktionen in einer Tabelle gespeichert)

val trainLp = train.map(row => LabeledPoint(row.getInt(0).toDouble, Vectors.dense(row(8).asInstanceOf[Int].toDouble,row(9).asInstanceOf[Int].toDouble,row(10).asInstanceOf[Int].toDouble,row(11).asInstanceOf[Int].toDouble,row(12).asInstanceOf[Int].toDouble,row(13).asInstanceOf[Int].toDouble,row(14).asInstanceOf[Int].toDouble,row(15).asInstanceOf[Int].toDouble,row(18).asInstanceOf[Int].toDouble,row(21).asInstanceOf[Int].toDouble,row(27).asInstanceOf[Int].toDouble,row(28).asInstanceOf[Int].toDouble,row(29).asInstanceOf[Int].toDouble,row(30).asInstanceOf[Int].toDouble,row(31).asInstanceOf[Double],row(32).asInstanceOf[Double],row(33).asInstanceOf[Double],row(34).asInstanceOf[Double],row(35).asInstanceOf[Double],row(36).asInstanceOf[Double],row(37).asInstanceOf[Double],row(38).asInstanceOf[Double],row(39).asInstanceOf[Double],row(40).asInstanceOf[Double],row(41).asInstanceOf[Double],row(42).asInstanceOf[Double],row(43).asInstanceOf[Double]))) 

Dies ist ein Alptraum zu halten, da diese Zeilen neigen ziemlich oft ändern.

Und hier bin ich nur in der Phase des Beschriftens Punkte, ich bin nicht einmal bei einer SVM gespeicherten Version dieser Daten.

Was fehlt mir hier, was mich möglicherweise Tage des Elends retten könnte?

EDIT:

I zu der Lösung einen Schritt näher kam etwas namens ein vectorassembler meinen Vektor aufzubauen

+0

Ich habe exacttly die gleiche frusterating Problem, im mit pspark –

Antwort

0

Normalerweise CSV-Dateien sind rohe, ungefilterte Quellen von Informationen. Oft bieten sie die ursprüngliche Informationsquelle.

Um ein Modell zu erstellen, möchten Sie in der Regel eine Datenbereinigung, Datenvorbereitung, Datenkonflikt (und vielleicht mehr "Daten x" Formulierung) durchlaufen, bevor Sie Ihr Modell erstellen. Diese Phase nimmt normalerweise einen großen Teil des Modellbaus in Anspruch und erfordert normalerweise die Untersuchung von Daten. In der Regel findet ein Prozess der Transformation und Featureauswahl (und Erstellung) zwischen den Originaldaten und den Daten, die das Modell aufbauen, statt.

Wenn Ihre CSV-Dateien keine dieser vorbereitenden Phasen benötigen - gut für Sie! Sie können jederzeit Konfigurationsdateien erstellen, die bestimmte Spalten oder Spaltenindizes verfolgen können, die Ihr Modell aufbauen.

Wenn Ihr Dataframe von einem "Auswählen" kommt, rate ich, was Sie tun können, um Lesbarkeit und Wartbarkeit zu verbessern, indem Sie Spaltennamen anstelle von Indexnummern verwenden.

df.select($"my_col_1", $"my_col_2", ..) 

und arbeiten dann durch

row.getAs[String]("my_col_1") 
Verwandte Themen