我是spark-graphx和scala的新手。我编写此方法来验证球门顶点的得分是否已更改。
def IsGoalVertexFound(graph: Graph[(VertexId,(Int,Float,Float,Float,String)),Float],goalVertex:(VertexId,(Int,Float,Float,Float))): Boolean ={
var IsgoalFound:Boolean=false
var targetVertex=graph.vertices.filter{ case (id,(_,gScore,_,_,_)) => id == goalVertex._1 && gScore!=Float.PositiveInfinity}
if(targetVertex.isEmpty())
IsgoalFound=true
return IsgoalFound
}我得到了这个错误:
Error:(41, 54) constructor cannot be instantiated to expected type;
found : (T1, T2, T3, T4, T5)
required: (org.apache.spark.graphx.VertexId, (Int, Float, Float, Float, String))
(which expands to) (Long, (Int, Float, Float, Float, String))
var targetVertex=graph.vertices.filter{ case (id,(_,gScore,_,_,_)) => id == goalVertex._1 && gScore!=Float.PositiveInfinity}有什么想法吗?非常感谢
发布于 2016-10-30 05:49:01
这看起来像是序列化错误。尝试将goalVertex._1参数提取到局部变量中,这样VertexId就不会被序列化:
def IsGoalVertexFound(graph: Graph[(VertexId,(Int,Float,Float,Float,String)),Float],goalVertex:(VertexId,(Int,Float,Float,Float))): Boolean ={
var IsgoalFound:Boolean=false
val localGoal = goalVertex._1
var targetVertex=graph.vertices.filter{ case (id,(_,gScore,_,_,_)) => id == localGoal && gScore!=Float.PositiveInfinity}
if(targetVertex.isEmpty())
IsgoalFound=true
return IsgoalFound
}发布于 2016-10-30 19:26:48
我尝试了以下解决方案,它工作正常:
def IsGoalVertexFound(graph: Graph[(VertexId,(Int,Float,Float,Float,String)),Float],goalVertex:(VertexId,(Int,Float,Float,Float))): Boolean ={
var IsgoalFound:Boolean=false
var targetVertex=graph.vertices.filter{ case (id,attr) => id == goalVertex._1 && attr._2._2!=Float.PositiveInfinity}.first()
// if(targetVertex.isEmpty())
// IsgoalFound=true
return IsgoalFound
}https://stackoverflow.com/questions/40322642
复制相似问题