【发布时间】:2016-05-18 10:39:53
【问题描述】:
我试图使用 apache spark 查找在大量数据上搜索不相交集(连接组件/联合查找)的算法。 问题是数据量。甚至图形顶点的原始表示也不适合单机上的 ram。边缘也不适合 ram。
源数据是hdfs上图边的文本文件:“id1 \t id2”。
id 以字符串值的形式出现,而不是 int。
我发现的幼稚解决方案是:
- 获取边的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 - 从第 2 阶段开始重复,而第 3 步中 rdd 的大小不会改变
但这会导致节点之间传输大量数据 (洗牌)
有什么建议吗?
【问题讨论】:
-
我认为 graphx 会内置你需要的东西(链接:spark.apache.org/graphx)
标签: algorithm apache-spark mapreduce graph-theory disjoint-sets