列要素必须是org.apache.spark.ml.linalg.VectorUDT类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列要素必须是org.apache.spark.ml.linalg.VectorUDT类型相关的知识,希望对你有一定的参考价值。
我想在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
。
您可以找到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
也许你可以找到有趣的这个stackoverflow question。
以上是关于列要素必须是org.apache.spark.ml.linalg.VectorUDT类型的主要内容,如果未能解决你的问题,请参考以下文章
值 toDF 不是 org.apache.spark.rdd.RDD[(Long, org.apache.spark.ml.linalg.Vector)] 的成员
PySpark 中的 org.apache.spark.ml.feature.Tokenizer NPE
NoSuchMethodException:Pyspark 模型加载中的 org.apache.spark.ml.classification.GBTClassificationModel
线程“主”java.lang.NoClassDefFoundError 中的异常:IntelliJ 中的 org/apache/spark/ml/feature/VectorAssembler