我是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 failed: 列特征的类型必须是 struct
<type:tinyint,size:int,index:array>,values:array > 但实际上是结构的<type:tinyint,size:int,indices:array> ,values:array >。
我不确定为什么当列"功能"的实际类型与预期完全匹配时出现此错误。
我在以下环境中工作时遇到了同样的问题: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中修复它的线索。
根本原因是您可以同时导入ml和mllib。如果我导入Vectors,SparseVector和VectorUDT,我曾经有过类似的消息。有些是从ml导入的,有些是从mllib导入的。我仅从 ml 导入它们后,此错误消息消失了。