Spark Scala: Konvertieren von DataFrame [vector] in DataFrame [f1: Double,…, fn: Double)]

Ich habe gerade Standard Scaler verwendet, um meine Funktionen für eine ML-Anwendung zu normalisieren. Nachdem ich die skalierten Features ausgewählt habe, möchte ich diese zurück in einen Datenrahmen mit Doppelwerten konvertieren, obwohl die Länge meiner Vektoren willkürlich ist. Ich kann es für bestimmte 3 Eigenschaften tun, indem ich @ benut

myDF.map{case Row(v: Vector) => (v(0), v(1), v(2))}.toDF("f1", "f2", "f3")

, aber nicht für eine beliebige Anzahl von Funktionen. Gibt es eine einfache Möglichkeit, dies zu tun?

Beispiel

val testDF = sc.parallelize(List(Vectors.dense(5D, 6D, 7D), Vectors.dense(8D, 9D, 10D), Vectors.dense(11D, 12D, 13D))).map(Tuple1(_)).toDF("scaledFeatures")
val myColumnNames = List("f1", "f2", "f3")
// val finalDF = DataFrame[f1: Double, f2: Double, f3: Double] 

BEARBEITE

Ich habe herausgefunden, wie beim Erstellen des Datenrahmens in Spaltennamen entpackt werden kann, habe aber immer noch Probleme, einen Vektor in eine Sequenz zu konvertieren, die zum Erstellen des Datenrahmens benötigt wird:

finalDF = testDF.map{case Row(v: Vector) => v.toArray.toSeq /* <= this errors */}.toDF(List("f1", "f2", "f3"): _*)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage