列要素必须是org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7类型,但实际上是org.apache.spark.mllib.linalg.VectorUDT@f71b0bce

时间:2018-04-09 06:32:31

标签: apache-spark

spark版本是2.2.0,scala版本是2.11.当我使用ml lib时,会发生错误:"列要素必须是org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7类型,但实际上是org.apache.spark.mllib.linalg.VectorUDT@f71b0bce。"

这是我的代码:

import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions._

 val trainingData = dataSet
  .select(col("features"), col("label")).cache()

val lr = new LogisticRegression()
  .setMaxIter(maxIter)
  .setRegParam(regParam)
  .setElasticNetParam(0)
  .setThreshold(threshold)
  .setFitIntercept(false)

val lrModel = lr.fit(trainingData)

这让我困惑了几天。谁能帮助我?

1 个答案:

答案 0 :(得分:2)

错误消息非常清楚您正在使用org.apache.spark.mllib.linalg.VectorUDT(旧的MLlib API),而任何新的API(ML)需要org.apache.spark.ml.linalg.Vector

您省略了创建dataSet的代码部分,但您应该替换:

org.apache.spark.mllib.linalg._

导入:

org.apache.spark.ml._ 

并相应地调整上游代码。

相关: