2017-09-25 6 views
0

私はグラフを持っており、最大次数を計算したいと思います。特に、最大次数を持つ頂点はすべてのプロパティを知りたい。 これは、コードのスニペットです:Scala - Spark:特定のノードから頂点のプロパティを返します。

def max(a: (VertexId, Int), b: (VertexId, Int)): (VertexId, Int) = { 
    if (a._2 > b._2) a else b 
} 

val maxDegrees : (VertexId, Int) = graphX.degrees.reduce(max) 
max: (a: (org.apache.spark.graphx.VertexId, Int), b: (org.apache.spark.graphx.VertexId, Int))(org.apache.spark.graphx.VertexId, Int) 
maxDegrees: (org.apache.spark.graphx.VertexId, Int) = (2063726182,56387) 

val startVertexRDD = graphX.vertices.filter{case (hash_id, (id, state)) => hash_id == maxDegrees._1} 
startVertexRDD.collect() 

しかし、それは、この例外を返しました:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 145.0 failed 1 times, most recent failure: Lost task 0.0 in stage 145.0 (TID 5380, localhost, executor driver): scala.MatchError: (1009147972,null) (of class scala.Tuple2) 

それを解決することができますか?

答えて

1

これは問題だと思います。ここで:

val startVertexRDD = graphX.vertices.filter{case (hash_id, (id, state)) => hash_id == maxDegrees._1} 

だから、このような何かを期待この

(2063726182,56387) 

のようないくつかのタプルを比較しようとします:(VertextIdのTuple2を比較しているので、scala.MatchErrorを上げる

(hash_id, (id, state)) 

を、Int)のTuple2(VertexId、Tuple2(id、state))

このように注意してくださいL:具体的には、ここで

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 145.0 failed 1 times, most recent failure: Lost task 0.0 in stage 145.0 (TID 5380, localhost, executor driver): scala.MatchError: (1009147972,null) (of class scala.Tuple2) 

scala.MatchError: (1009147972,null) 

ので、それは比較したときには、同様にいくつかの問題を上げることができる頂点1009147972のために計算何度がありません。

これが役に立ちます。

コードのこの部分を有する単離されたノードがあった場合、私がチェック
+0

:ヴァルvertexDegreeは: VertexRDD [INT] = graphX.degrees ヴァルvertexNoDegree = vertexDegree.filter {場合(ID、度)=>度== NULL} vertexNoDegree.isEmpty() res6:Boolean = true 孤立ノードはありません...私は何をすべきかわかりません – alukard990

関連する問題