5

Ich benutze Spark Cluster 2.0 und ich möchte einen Vektor von org.apache.spark.mllib.linalg.VectorUDT zu org.apache.spark.ml.linalg.VectorUDT konvertieren.Wie konvertiert man von org.apache.spark.mllib.linalg.VectorUDT zu ml.linalg.VectorUDT

# Import LinearRegression class 
from pyspark.ml.regression import LinearRegression 

# Define LinearRegression algorithm 
lr = LinearRegression() 

modelA = lr.fit(data, {lr.regParam:0.0}) 

Fehler:

u'requirement failed: Column features must be of type [email protected] but was actually [email protected]'

Alle Gedanken, wie würde ich diese Konvertierung zwischen Vektortypen zu tun.

Vielen Dank.

Antwort

6

In PySpark benötigen Sie eine oder map über RDD. Lassen Sie uns die erste Option verwenden. Zuerst ein paar Importe:

from pyspark.ml.linalg import VectorUDT 
from pyspark.sql.functions import udf 

und eine Funktion:

as_ml = udf(lambda v: v.asML() if v is not None else None, VectorUDT()) 

mit Beispieldaten:

from pyspark.mllib.linalg import Vectors as MLLibVectors 

df = sc.parallelize([ 
    (MLLibVectors.sparse(4, [0, 2], [1, -1]),), 
    (MLLibVectors.dense([1, 2, 3, 4]),) 
]).toDF(["features"]) 

result = df.withColumn("features", as_ml("features")) 

Das Ergebnis ist

+--------------------+ 
|   features| 
+--------------------+ 
|(4,[0,2],[1.0,-1.0])| 
| [1.0,2.0,3.0,4.0]| 
+--------------------+ 
Verwandte Themen