如何修复:pyspark.sql.utils.IllegalArgumentException:列功能的类型不正确?
Posted
技术标签:
【中文标题】如何修复:pyspark.sql.utils.IllegalArgumentException:列功能的类型不正确?【英文标题】:How to fix: pyspark.sql.utils.IllegalArgumentException: incorrect type for Column features? 【发布时间】:2019-03-31 06:47:22 【问题描述】:我是 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: Column features must be of type struct,values:array> 但实际上是 struct ,values:array>.'
当“功能”列的实际类型与预期完全匹配时,我不确定为什么会收到此错误。
【问题讨论】:
您可能需要为 createDataFrame 方法指定架构 【参考方案1】:我在以下环境中工作时遇到了同样的问题: 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 中修复它的线索。
【讨论】:
【参考方案2】:我猜根本原因是您可能同时导入 ml 和 mllib。如果我导入 Vectors、SparseVector 和 VectorUDT,我曾经收到过类似的消息。有些是从 ml 导入的,有些是从 mllib 导入的。在我只从 ml 导入它们之后,这个错误消息就消失了。
【讨论】:
以上是关于如何修复:pyspark.sql.utils.IllegalArgumentException:列功能的类型不正确?的主要内容,如果未能解决你的问题,请参考以下文章