スパークGraphX図コンピューティング構造[図の詳細なビルダー、頂点、エッジ]

I.図ビルダー

  GraphXはRDDまたはディスクの頂点と辺からグラフィックのセットを構築するには、いくつかの方法を提供します。デフォルトでは、図側ビルダー図を再描画しない。反対に、辺はデフォルトパーティションに残ります。それは、パーティションの同じ側に配置されます同じ、Graph.partitionByを呼び出す前にgroupEdgesを呼び出す必要があることを前提としているため、図の再分割の要件をGraph.groupEdges。 

1つの パッケージorg.apache.spark.graphx
 2  
3  インポートorg.apache.spark.SparkContext
 4  インポートorg.apache.spark.graphx.impl。{EdgePartitionBuilder、GraphImpl}
 5  インポートorg.apache.spark.internal.Logging
 6  インポートORG .apache.spark.storage.StorageLevelは
 7  
8  / ** 
9  *ファイルからの読み込み[[グラフ]]のためのユーティリティを提供します。
10   * / 
11 GraphLoaderオブジェクト延び{ログ
 12  
13    / ** 
14    *各ラインは2つの整数を含むファイルフォーマットエッジリストからロードグラフ:ソース
 15     * IDとターゲットID。`#`で始まる行をスキップします。
16     * / 
17    DEF edgeListFile(
 18        SC:SparkContext、
 19        パス:文字列、
 20        canonicalOrientation:ブール= 21        numEdgePartitionsます。int = -1 22        edgeStorageLevel:StorageLevel = StorageLevel.MEMORY_ONLY、//缓存级别、只保存到内存
 23        vertexStorageLevel:StorageLevel = StorageLevel.MEMORY_ONLY)
 24      :グラフ[INT、INT] =
 25   {
 26は      ヴァルのstartTime = のSystem.currentTimeMillis
 27  
28      // 直接エッジエッジパーティションに解析データを表
29      ヴァル行=
 30        IF(numEdgePartitions> 0 ){//データファイルのロード
 31である         sc.textFile(パス、numEdgePartitions).coalesce( numEdgePartitions)
 32        } {
 33である         sc.textFile(経路)
 34である       //構築図パーティションに従って}
 35の      ヴァルlines.mapPartitionsWithIndexエッジ= {(PID、ITER)=>
 36        ヴァルビルダー= 新しい新しいEdgePartitionBuilder [INT、INT]
 37 [       iter.foreach {ライン=>
 38          であれば(!line.isEmpty &&ライン(0)!= '#' ){//过滤注释行
 39            ヴァルlineArray = line.split( "\\ S +" 40            の場合(lineArray。長さ<2 ){//识别异常数据
 41               新しいはIllegalArgumentException( "無効な行:" + ライン)
 42            }
 43            ヴァルSRCID = lineArray(0 ).toLong
 44            ヴァルdstId = lineArray(1 ).toLong
 45            であれば(canonicalOrientation && SRCID> dstId){
 46              builder.add(dstId、SRCID、1 )// 1つの側と体重を追加
47            } {
 48              builder.add(SRCID、dstId、1 49            }
 50          }
 51        }
 52        反復子((PID、builder.toEdgePartition))
 53      (「GraphLoader.edgeListFile} .persist(edgeStorageLevel).setName -エッジ(%単数または複数)」.format(パス))
 54      edges.count()//触发执行
 55  
56      LOGINFO( "それはエッジ" .format(のSystem.currentTimeMillisロードするために%d個のMSを取った- たstartTime))を
 57  
58      GraphImpl.fromEdgePartitions(縁、defaultVertexAttr = 1、edgeStorageLevel = edgeStorageLevel、
 59       vertexStorageLevel = vertexStorageLevel)
 60    } // edgeListFileの端部
61  
62 }

  GraphLoader.edgeListFileグラフィックデータ、ディスクまたはHDFSのようなファイルシステムからロード解決される隣接リストの(ソース頂点ID、目標頂点ID)、およびコメント行がスキップされます。グラフは、指定された側の作成を開始し、その後自動的にエッジに隣接するノードを作成します。すべてのエッジと頂点を1に、デフォルトの属性。CanonicalOrientationパラメータは、すべての必要なアルゴリズムに接続される正方向側をリダイレクトすることを可能にします。

 

 

 

おすすめ

転載: www.cnblogs.com/yszd/p/11823153.html