在pyspark.mllib中输入来自LabeledPoint的转换错误,以便在pyspark.ml中使用线性回归模型

时间:2017-02-14 16:38:08

标签: pyspark linear-regression

我使用pyspark.ml包进行线性回归的以下代码。但是,当模型适合时,我得到最后一行的此错误消息:

  

IllegalArgumentException:u'要求失败:列要素必须   是类型org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7但是   实际上是org.apache.spark.mllib.linalg.VectorUDT@f71b0bce。

有没有人知道缺少什么? pyspark.mlLabeledPoint的{​​{1}}是否有任何替换?

pyspark.mllib

2 个答案:

答案 0 :(得分:4)

问题是较新版本的spark在ml的linalg模块中有一个Vector类,你不需要从mllib.linalg获取它。此外,较新的版本不接受以ml为单位的spark.mllib.linalg.VectorUDT。这是适合您的代码:

from pyspark import SparkContext
from pyspark.ml.regression import LinearRegression
from pyspark.ml.linalg import Vectors
import numpy as np


data = sc.textFile("/FileStore/tables/w7baik1x1487076820914/randomTableSmall.csv")

def parsePoint(line):
    values = [float(x) for x in line.split(',')]
    return (values[1], Vectors.dense([values[0]]))


points_df = data.map(parsePoint).toDF(['label','features'])

lr = LinearRegression()

model = lr.fit(points_df)

答案 1 :(得分:0)

Spark较新的版本不接受spark.mllib.linalg.VectorUDT(你不需要从mllib.linalg获取它)。

尝试替换

from pyspark.mllib.regression import LabeledPoint

由:

from pyspark.ml.linalg import Vectors