如何修复: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:列功能的类型不正确?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

如何修复WMI

PHP网站漏洞怎么修复 如何修补网站程序代码漏洞

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

如何修复AppScan漏洞

如何在DOS环境下修复系统