我是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:u'requirement失败:列特征必须为struct <类型:tinyint,size:int,indices:array
,values:array >,但实际上是struct ,values:array >。'
我不确定当“功能”列的实际类型与预期的确切匹配时为什么会出现此错误。
答案 0 :(得分:0)
我猜想根本原因是您可能同时导入ml和mllib。如果导入Vectors,SparseVector和VectorUDT,我曾经有过类似的消息。有些是从ml导入的,有些是从mllib导入的。仅从ml导入它们之后,此错误消息就消失了。
答案 1 :(得分:0)
在以下环境中工作时,我遇到了同样的问题: Databrick,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中修复它的线索。