我正在尝试找到使用Apache Spark在大量数据上搜索不相交集合(连接组件/并查集)的算法。问题在于数据量很大,即使是图形顶点的原始表示形式也无法适应单个计算机的内存,边缘也不能满足内存要求。
源数据是HDFS上的图形边缘文本文件: "id1 \ tid2"。
id以字符串值而非整数表示。
我发现的朴素解决方案是:
有什么建议?
源数据是HDFS上的图形边缘文本文件: "id1 \ tid2"。
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]
- 来自第3和4个阶段的rdd的
leftOuterJoin
- 在第3步中rdd的大小不变的情况下重复从第2个阶段开始
有什么建议?