如何将ML VectorUDT功能从.mllib转换为.ml类型

时间:2016-08-11 15:57:22

标签: machine-learning pyspark

在版本2.0.0中使用pySpark ML API进行线性回归的简单示例,我在新ML库中出错。

代码是:

from pyspark.sql import SQLContext
sqlContext =SQLContext(sc)
from pyspark.mllib.linalg import Vectors

data=sc.parallelize(([1,2],[2,4],[3,6],[4,8]))
def f2Lp(inStr):
    return (float(inStr[0]), Vectors.dense(inStr[1]))
Lp = data.map(f2Lp)
testDF=sqlContext.createDataFrame(Lp,["label","features"])
(trainingData, testData) = testDF.randomSplit([0.8,0.2]) 
from pyspark.ml.regression import LinearRegression
lr=LinearRegression()
model=lr.fit(trainingData)

和错误:

IllegalArgumentException: u'requirement failed: Column features must be of type org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7 but was actually org.apache.spark.mllib.linalg.VectorUDT@f71b0bce.'

我应该如何将矢量要素从.mllib转换为.ml类型?

2 个答案:

答案 0 :(得分:9)

从Spark2.0使用

from pyspark.ml.linalg import Vectors, VectorUDT

而不是

from pyspark.mllib.linalg import Vectors, VectorUDT

答案 1 :(得分:0)

方法1 使用正确的导入可以解决此问题 那是

istioctl kube-inject

其他方法是使用mapper函数将mllib向量转换为字符串并将其解析回ml向量。