Scala java.util.IllegalFormatConversionException:f!=org.apache.spark.mllib.linalg.DenseVector

Scala java.util.IllegalFormatConversionException:f!=org.apache.spark.mllib.linalg.DenseVector,scala,apache-spark,Scala,Apache Spark,如何解决错误java.util.IllegalFormatConversionException:f!=org.apache.spark.mllib.linalg.DenseVector用于以下情况 gridEvalsRDD的格式为RDD[(Any,Any,Any,Double)],其中第一个Any实际上是向量 我想将gridEvalsRDD保存到文本文件中,该文件对于非矢量参数非常有效。但是,当我添加(.3f,%.3f)时,它停止工作 gridEvalsRDD.coalesce(1)

如何解决错误
java.util.IllegalFormatConversionException:f!=org.apache.spark.mllib.linalg.DenseVector
用于以下情况

gridEvalsRDD
的格式为
RDD[(Any,Any,Any,Double)]
,其中第一个
Any
实际上是
向量

我想将
gridEvalsRDD
保存到文本文件中,该文件对于非矢量参数非常有效。但是,当我添加
(.3f,%.3f)
时,它停止工作

gridEvalsRDD.coalesce(1)
            .map(e => "(%.3f,%.3f)\t%.3f\t%d\t%.3f".format(e._1, e._2, e._3, e._4))
            .saveAsTextFile("/data/mllib/streaming")
更新:

命令
gridEvalsRDD.take(10).foreach(println)
给出以下输出:

([0.0,0.0],0.1,25,75.75387778915743)
([0.0,0.0],0.1,50,59.6236379213822)
([0.0,0.0],0.2,25,46.98150325231958)
([0.0,0.0],0.2,50,34.53505034116878)
([0.0,0.0],0.3,25,33.497574283944445)
([0.0,0.0],0.3,50,23.03051323629829)
([10.0,10.0],0.1,25,2.6248163436296816)
([10.0,10.0],0.1,50,2.6248163436296816)
([10.0,10.0],0.2,25,2.6233782858570853)
([10.0,10.0],0.2,50,2.6233782858570853)

好的,在聊天中与您进行了一次小讨论之后,问题在于您实际使用参数网格的方式

因此,首先,我将把gridParams重新定义为一个对象,而不是一个映射

object gridParams {
  val initialWeights: List[Vector] = List(Vectors.dense(0.0, 0.0), Vectors.dense(10.0, 10.0))
  val stepSize: List[Double] = List(0.1, 0.2, 0.3)
  val numIterations: List[Int] = List(25, 25)
}
然后,我可以使用以下参数计算评估:

val gridEvals: List[(Vector, Double, Int, Double)] = for (w <- gridParams.initialWeights;
                                                          s <- gridParams.stepSize;
                                                          itr <- gridParams.numIterations) yield {
     // some computation
     val accuracy: Double = 1.0
     (w, s, itr, accuracy)
}

不,Any不是DenseVector,Any是Any@eliasah:好的,我同意你的看法。所以问题是如何处理
f!=org.apache.spark.mllib.linalg.DenseVector
?如果我把
“%.3f\t%.3f\t%d\t%.3f”
“(.3f,%.3f),\t%.3f\t%d\t%.3f”
,它就不起作用了。但是,如果我排除了第一个元素(它确实是一个向量),那么一切都正常了。你能用gridEvalsRDD.take(10.foreach(println)更新你的问题吗?@eliasah:Done。请看我的更新。你想完成什么?
val gridEvalsRDD = sc.parallelize(gridEvals)
gridEvalsRDD.coalesce(1)
    .map(e => "%s\t%.3f\t%d\t%.3f".format(e._1.toString, e._2, e._3, e._4))
    .saveAsTextFile("./data/mllib/streaming")