簡體   English   中英

關於apache火花的脫節設置

[英]Disjoint sets on apache spark

我試圖找到使用apache spark在大量數據上搜索不相交集(連接組件/ union-find)的算法。 問題是數據量。 甚至圖頂點的Raw表示也不適合單機上的ram。 邊緣也不適合公羊。

源數據是hdfs上圖形邊緣的文本文件:“id1 \\ t id2”。

id作為字符串值存在,而不是int。

我發現天真的解決方案是:

  1. 取rdd of edges - > [id1:id2] [id3:id4] [id1:id3]
  2. 按鍵分組邊緣。 - > [id1:[id2;id3]][id3:[id4]]
  3. 為每個記錄設置每組最小ID - > (flatMap) [id1:id1][id2:id1][id3:id1][id3:id3][id4:id3]
  4. 從第3階段反轉rdd [id2:id1] -> [id1:id2]
  5. leftOuterJoin of rdds from stage 3 and 4
  6. 從第2階段開始重復,而第3步的rdd大小不會改變

但這導致節點之間傳輸大量數據(改組)

有什么建議嗎?

如果您正在使用圖表,我建議您查看其中一個庫

它們都提供開箱即用的連接組件算法。

GraphX

val graph: Graph = ...
val cc = graph.connectedComponents().vertices

GraphFrames

val graph: GraphFrame = ...
val cc = graph.connectedComponents.run()
cc.select("id", "component").orderBy("component").show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM