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")