5

Używam Spark cluster 2.0 i chciałbym przekonwertować wektor z org.apache.spark.mllib.linalg.VectorUDT na org.apache.spark.ml.linalg.VectorUDT.Jak przekonwertować z org.apache.spark.mllib.linalg.VectorUDT na 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}) 

Błąd:

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

Wszelkie myśli jak by to zrobić konwersję pomiędzy rodzajami wektorowych.

Wielkie dzięki.

Odpowiedz

6

W PySpark będziesz potrzebować lub map przez RDD. Użyjmy pierwszej opcji. Pierwsza para importu:

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

i funkcją:

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

z przykładowymi danymi:

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")) 

Rezultatem jest

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