0

Ich habe ein Dataset/Dataframe mit einer mllib.linalg.Vector (von Doubles) als eine der Spalten. Ich würde gerne eine weitere Spalte zu diesem Datensatz vom Typ ml.linalg.Vector zu diesem Datensatz hinzufügen (also werde ich beide Arten von Vectors haben). Der Grund ist, dass ich einige Algorithmen beurteile und einige davon erwarten mllib Vektor und einige erwarten Vektor. Außerdem muss ich o/p von einem Algorithmus zu einem anderen füttern und jeder benutzt unterschiedliche Typen.Verwenden von MLUtils.convertVectorColumnsToML() in einer UDF?

Kann mir bitte jemand helfen, mllib.linalg.Vector in ml.linalg.Vector umzuwandeln und eine neue Spalte an den Datensatz in der Hand anzuhängen. Ich habe versucht, innerhalb einer und regulären Funktionen, aber nicht in der Lage, es zum Arbeiten zu bekommen. Ich versuche zu vermeiden, ein neues Dataset zu erstellen und dann innerer Join zu machen und die Spalten fallen zu lassen, da der Datensatz schließlich riesig sein wird und Joins teuer sind.

Antwort

0

Sie können die Methode toML von mllib in Vektor konvertieren. Ein UDF und Verwendungsbeispiel kann wie folgt aussehen:

val convertToML = udf((mllibVec: org.apache.spark.mllib.linalg.Vector) = > { 
    mllibVec.asML 
}) 

val df2 = df.withColumn("mlVector", convertToML($"mllibVector")) 

df Unter der Annahme der ursprüngliche Datenrahmen und die Säule mit dem mllib Vektor sein, um mllibVector benannt werden.

Verwandte Themen