apache spark を使用して、大量のデータでばらばらなセット (接続されたコンポーネント/ユニオン検索) を検索するアルゴリズムを見つけようとしています。問題はデータ量です。グラフ頂点の Raw 表現でさえ、単一のマシンの RAM には収まりません。エッジもラムに収まりません。
ソース データは、hdfs 上のグラフ エッジのテキスト ファイル: "id1 \t id2" です。
int ではなく文字列値として存在する id。
私が見つけた単純な解決策は次のとおりです。
- エッジの rdd を取る ->
[id1:id2] [id3:id4] [id1:id3]
- エッジをキーでグループ化します。->
[id1:[id2;id3]][id3:[id4]]
- 各レコードに対して、各グループに最小 ID を設定 ->
(flatMap) [id1:id1][id2:id1][id3:id1][id3:id3][id4:id3]
- ステージ3から逆rdd
[id2:id1] -> [id1:id2]
leftOuterJoin
ステージ 3 および 4 の rdds の- ステップ3のrddのサイズが変わらない間、ステージ2から繰り返します
ただし、これにより、ノード間で大量のデータが転送されます (シャッフル)。
何かアドバイスはありますか?