【问题标题】:Column features must be of type org.apache.spark.ml.linalg.VectorUDT列特征必须是 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.

【问题讨论】:

    标签: apache-spark import pyspark


    【解决方案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
    

    也许你会发现这个stackoverflow question很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 2020-05-10
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多