overloaded method value run with alternatives: (input: org.apache.spark.api.java.JavaRDD[(java.lang.Double, java.lang.Double, java.lang.Double)])org.apache.spark.mllib.regression.IsotonicRegressionModel <and> (input: org.apache.spark.rdd.RDD[(scala.Double, scala.Double, scala.Double)])org.apache.spark.mllib.regression.IsotonicRegressionModel cannot be applied to (org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.LabeledPoint]) val model = new IsotonicRegression().setIsotonic(true).run(train)
时间: 2023-08-04 19:08:20 浏览: 244
这个错误是因为你使用了错误类型的输入数据。IsotonicRegression 的 run 方法有两个重载版本,分别接受 JavaRDD[(Double, Double, Double)] 和 RDD[(Double, Double, Double)] 作为输入参数。而你传递给 run 方法的是 RDD[LabeledPoint],因此编译器无法确定应该使用哪个重载版本。
要解决这个问题,你需要将 RDD[LabeledPoint] 转换为 IsotonicRegression 支持的输入类型。一种方法是使用 map 方法将 LabeledPoint 转换为 (Double, Double, Double) 元组,例如:
```scala
val data = train.map(lp => (lp.label, lp.features(0), 1.0))
val model = new IsotonicRegression().setIsotonic(true).run(data)
```
这里假设你的 LabeledPoint 对象的 features 属性只包含一个 Double 值。如果你的 features 属性包含多个值,你需要将它们转换为一个 Double 值,或者选择一个合适的值作为第二个元组元素。
另外,你也可以使用 IsotonicRegressionModel 的 train 方法来训练模型,它接受一个 RDD[LabeledPoint] 作为输入参数。例如:
```scala
val model = new IsotonicRegression().setIsotonic(true).train(train)
```
这个方法会在内部将 LabeledPoint 转换为 (Double, Double, Double) 元组,因此你不需要手动进行转换。
阅读全文