列特征必须是 org.apache.spark.ml.linalg.VectorUDT 类型
Posted
技术标签:
【中文标题】列特征必须是 org.apache.spark.ml.linalg.VectorUDT 类型【英文标题】:Column features must be of type org.apache.spark.ml.linalg.VectorUDT 【发布时间】:2017-06-01 09:40:21 【问题描述】:我想在 pyspark (spark 2.1.1) 中运行这段代码:
from pyspark.ml.feature import PCA
bankPCA = PCA(k=3, inputCol="features", outputCol="pcaFeatures")
pcaModel = bankPCA.fit(bankDf)
pcaResult = pcaModel.transform(bankDF).select("label", "pcaFeatures")
pcaResult.show(truncate= false)
但我收到此错误:
要求失败:列特征必须是类型
org.apache.spark.ml.linalg.Vect orUDT@3bfc3ba7
但实际上是org.apache.spark.mllib.linalg.VectorUDT@f71b0bce
.
【问题讨论】:
【参考方案1】:你可以找到here的例子:
from pyspark.ml.feature import PCA
from pyspark.ml.linalg import Vectors
data = [(Vectors.sparse(5, [(1, 1.0), (3, 7.0)]),),
(Vectors.dense([2.0, 0.0, 3.0, 4.0, 5.0]),),
(Vectors.dense([4.0, 0.0, 0.0, 6.0, 7.0]),)]
df = spark.createDataFrame(data, ["features"])
pca = PCA(k=3, inputCol="features", outputCol="pcaFeatures")
model = pca.fit(df)
... other code ...
正如您在上面看到的,df 是一个数据帧,其中包含从 pyspark.ml.linalg 导入的 Vectors.sparse() 和 Vectors.dense()。
您的 bankDf 可能包含 从 pyspark.mllib.linalg 导入的向量。
所以您必须设置导入数据框中的向量
from pyspark.ml.linalg import Vectors
代替:
from pyspark.mllib.linalg import Vectors
也许你会发现这个*** question很有趣。
【讨论】:
以上是关于列特征必须是 org.apache.spark.ml.linalg.VectorUDT 类型的主要内容,如果未能解决你的问题,请参考以下文章