2017-02-14 2 views
3

У меня есть следующий код для линейной регрессии с использованием пакета pyspark.ml. Однако я получаю сообщение об ошибке для последней строки, когда модель быть приспособленной:Ошибка преобразования типа из LabeledPoint в pyspark.mllib, для использования модели линейной регрессии в pyspark.ml

IllegalArgumentException: u'requirement не удался: особенности столбцов должны быть типа org.apache.spark.ml.linalg.VectorUDT @ 3bfc3ba7, но был фактически [email protected]

У кого-нибудь есть идея, чего не хватает? Есть ли какая-либо замена в pyspark.ml для LabeledPoint в pyspark.mllib?

from pyspark import SparkContext 
from pyspark.ml.regression import LinearRegression 
from pyspark.mllib.regression import LabeledPoint 
import numpy as np 
from pandas import * 


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

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


points_df = data.map(parsePoint).toDF() 

lr = LinearRegression() 

model = lr.fit(points_df, {lr.regParam:0.0}) 
+0

Пожалуйста, вы можете, дайте мне знать искровой версию вы используете и образец файла, который вы пытаетесь импортировать –

+0

pyspark.ml использует dataframes api, тогда как у вас нет имен столбцов, таких как «label» и «features», есть ли какая-то часть кода, который вы еще не опубликовали. –

+0

Это весь код, вызывающий ошибку. и вот несколько первых строк из файла данных, который читается с функцией 'parsePoint': 0.656992798279138,2.5834056958606 0.716673783763451,2.36159163031627 0.259623437084048,1.69482312701634 – Hamed

ответ

4

Проблема заключается в том, что новые версии искры имеют векторную класс в linalg модуль мл и вам не нужно, чтобы получить его от mllib.linalg. Кроме того, более новые версии не принимают 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) 
+0

Спасибо! оно работает. – Hamed

0

Спарк новые версии не принимают spark.mllib.linalg.VectorUDT (вам не нужно, чтобы получить его от mllib.linalg).

попытка заменить

from pyspark.mllib.regression import LabeledPoint

по:

from pyspark.ml.linalg import Vectors

Смежные вопросы