Как исправить: pyspark.sql.utils.IllegalArgumentException: неверный тип для функций столбцов? - PullRequest
0 голосов
/ 31 марта 2019

Я новичок в pyspark и пытаюсь запустить ниже простых кодов.

# create a RDD of LabeledPoint
bcData = MLUtils.loadLibSVMFile(sc, "breast-cancer.txt")

# convert it to DataFrame
bcDataFrame = ss.createDataFrame(bcData)
bcDataFrame.cache()

# split the data
(training_data, testing_data) = bcDataFrame.randomSplit([0.8, 0.2])

# create the model
dt_classifier = DecisionTreeClassifier(impurity="gini", maxDepth=2, labelCol="label", featuresCol="features")
dt_model = dt_classifier.fit(training_data)

При запуске я получаю следующую ошибку в последней строке.

pyspark.sql.utils.IllegalArgumentException: не удалось выполнить условие <тип: tinyint, размер: int, индексы: массив <int>, значения: массив >. '

Я не уверен, почему я получаю эту ошибку, когда фактический тип «функций» столбца точно соответствует ожидаемому.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

У меня была такая же проблема при работе в следующей среде: Databricks, Spark 2.4.0, Scala 2.11

В моем случае ошибка была при импорте неправильных пакетов. Когда я ошибся:

import org.apache.spark.ml.feature.PCA
import org.apache.spark.mllib.linalg.Vectors

Ошибка при втором импорте (используется неправильный класс Vectors). Решением было изменить второй импорт на:

import org.apache.spark.ml.linalg.Vectors

и вуаля!

Надеюсь, это даст вам некоторые подсказки о том, как исправить это в python.

0 голосов
/ 18 апреля 2019

Полагаю, основная причина в том, что вы можете импортировать как ml, так и mllib. Когда-то у меня было похожее сообщение, если я импортировал Векторы, SparseVector и VectorUDT. Некоторые были импортированы из мл, а некоторые были импортированы из Mllib. После того, как я импортировал их только из ml, это сообщение об ошибке исчезло.

...