关于apache火花的脱节设置

时间:2016-05-18 10:39:54

标签: algorithm apache-spark mapreduce graph-theory disjoint-sets

我试图找到使用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阶段[id2:id1] -> [id1:id2]
  5. 反转rdd
  6. leftOuterJoin来自第3阶段和第4阶段的rdds
  7. 从第2阶段开始重复,而第3步的rdd大小不会改变
  8. 但这会导致节点之间传输大量数据 (改组)

    有任何建议吗?

1 个答案:

答案 0 :(得分:0)

如果您正在使用图表,我建议您查看其中一个库

他们都提供开箱即用的连通组件算法。

<强> 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()