Получение AttributeError: у объекта 'OneHotEncoder' нет атрибута '_jdf in pyspark' - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь реализовать алгоритм повышения градиента для набора данных kaggle в pyspark для целей обучения. Я сталкиваюсь с ошибкой, приведенной ниже

Traceback (most recent call last):
  File "C:/SparkCourse/Gradientboost.py", line 29, in <module>
    output=assembler.transform(data)
  File "C:\spark\python\lib\pyspark.zip\pyspark\ml\base.py", line 105, in transform
  File "C:\spark\python\lib\pyspark.zip\pyspark\ml\wrapper.py", line 281, in _transform
AttributeError: 'OneHotEncoder' object has no attribute '_jdf'

соответствующий код

from pyspark.sql import SparkSession
from pyspark.ml.feature import StringIndexer,VectorIndexer,OneHotEncoder,VectorAssembler





spark=SparkSession.builder.config("spark.sql.warehouse.dir", "file:///C:/temp").appName("Gradientboostapp").enableHiveSupport().getOrCreate()
data= spark.read.csv("C:/Users/codemen/Desktop/Timeseries Analytics/liver_patient.csv",header=True, inferSchema=True)
#data.show()
print(data.count())
#data.printSchema()
print("After deleting  null  values")

data=data.na.drop()
print(data.count())

data=StringIndexer(inputCol="Gender",outputCol="GenderIndex").fit(data)


#let onehot encode the data

data=OneHotEncoder(inputCol="GenderIndex",outputCol="gendervec")


usedfeature=["Age","gendervec","Total_Bilirubin","Direct_Bilirubin","Alkaline_Phosphotase","Alamine_Aminotransferase","Aspartate_Aminotransferase","Total_Protiens","Albumin","Albumin_and_Globulin_Ratio"]
#
assembler=VectorAssembler(inputCols=usedfeature,outputCol="features")
output=assembler.transform(data)
output.select("features","category").show()

Я преобразовал категорию «Пол» в числовую форму с помощью индексатора строк, а затем попытался выполнить кодирование OnehotEncoding для значения Genderindex. Я получаю ошибку, когда я выполнил VectorAssembler в коде. Могу ли я пропустить очень глупую концепцию здесь. пожалуйста, помогите мне разобраться

1 Ответ

0 голосов
/ 08 мая 2018

Эта строка кода неверна: data=OneHotEncoder(inputCol="GenderIndex",outputCol="gendervec"). Вы устанавливаете data равным объекту OneHotEncoder(), не преобразуя данные. Вам необходимо вызвать transform для кодирования данных. Это должно выглядеть так.

encoder=OneHotEncoder(inputCol="GenderIndex",outputCol="gendervec") data = encoder.transform(data)

...