在scala中已指定类型时,类型不匹配
我试图在scala中使用下面的代码,使用GraphX在scala中已指定类型时,类型不匹配,scala,rdd,spark-graphx,Scala,Rdd,Spark Graphx,我试图在scala中使用下面的代码,使用GraphX val vertexRDD: RDD[(VertexId, String)] = graph.vertices.filter({ case (id, (str)) => { val c: Boolean = scala.util.Try(str.toInt) match { case Success(_) => false ca
val vertexRDD: RDD[(VertexId, String)] = graph.vertices.filter({
case (id, (str)) => {
val c: Boolean = scala.util.Try(str.toInt) match {
case Success(_) => false
case _ => true
}
}
})
此函数与官方接口def filter(pred:Tuple2[VertexId,VD]=>Boolean):VertexRDD[VD]
但是,它会抛出一个类型不匹配
错误
[error] found : Unit
[error] required: Boolean
[error] }
[error] ^
怎么可能呢?我已经将返回值指定为
布尔值
,它实际上是布尔值
,对吗?..失败的原因是块的值是块中最后一个表达式的值,但不幸的是,块中最后一个表达式是一个声明,其类型为Unit
。要解决此问题,只需删除声明即可
您还可以使用Try.issucess
并删除一些不必要的括号来简化代码
val vertexRDD: RDD[(VertexId, String)] = graph.vertices.filter{
case (_, (str)) =>
scala.util.Try(str.toInt).isSuccess
}
您已将bool分配给
c
,分配将返回Unit
。若要返回bool,请删除赋值或将c
放在最后一行以返回它。@Shaido:为什么要以注释的形式给出答案?现在问题显示为未解决,直到有人重复您的评论作为答案。@userunknown我投票以“简单的印刷错误”结束该问题,但如果该问题仍然未解决,我可能会在稍后添加它作为答案。印刷错误?但事实并非如此。