使用 Hadoop/MapReduce 查找连接的组件



我需要为庞大的数据集找到连接的组件。(图形为无向(

一个明显的选择是MapReduce。但是我是MapReduce的新手,没有时间拿起它并自己编写代码。

我只是想知道是否有任何现有的API,因为它是社交网络分析中非常普遍的问题?

或者至少如果有人知道任何可靠的(经过试验和测试的(来源,至少我可以自己开始使用实施?

谢谢

我为自己写了博客:

http://codingwiththomas.blogspot.de/2011/04/graph-exploration-with-hadoop-mapreduce.html

但是MapReduce并不适合这些图分析的东西。为此,最好使用BSP(批量同步并行(,Apache Hama在Hadoop HDFS之上提供了一个很好的图形API。

我在这里用MapReduce编写了一个连接组件算法:(Mindist search(

https://github.com/thomasjungblut/tjungblut-graph/tree/master/src/de/jungblut/graph/mapreduce

Apache Hama的BSP版本也可以在这里找到:

https://github.com/thomasjungblut/tjungblut-graph/blob/master/src/de/jungblut/graph/bsp/MindistSearch.java

实现并不像MapReduce那样困难,而且至少快10倍。如果您有兴趣,请查看 TRUNK 中的最新版本并访问我们的邮件列表。

http://hama.apache.org/

http://apache.org/hama/mail-lists.html

我真的不知道是否有可用的 API,它具有查找强连接组件的方法。但是,我实现了BFS算法来查找从源节点到图中所有其他节点的距离(该图是一个有向图,大到6500万个节点(。

这个想法是在一次迭代中探索每个节点的邻居(距离为 1(,并将 reduce 的输出反馈回映射,直到距离收敛。映射从每个节点发出尽可能短的距离,并减少更新的节点与列表的最短距离。

我建议检查一下。此外,这可能会有所帮助。这两个链接将为您提供有关mapreduce范式中图形算法的基本概念(如果您已经不熟悉(。本质上,您需要扭曲算法以使用 DFS 而不是 BFS。

你可能想看看卡内基梅隆大学的Pegasus项目。它们使用MapReduce提供了一个高效而优雅的实现。它们还提供二进制文件、示例和非常详细的文档。

该实现本身基于U Kang在2009年提出的广义迭代矩阵-向量乘法(GIM-V(。

PEGASUS:PBA级图挖掘系统 - 实现和观察 U Kang, Charalampos E. Tsourakakis, Christos Faloutsos InIEEE数据挖掘国际会议(ICDM 2009(

编辑:官方实现实际上仅限于 21 亿个节点(节点 id 存储为整数(。我正在 github (https://github.com/placeiq/pegasus( 上创建一个分支来分享我的补丁和其他增强功能(例如。快速压缩(。

这是一个有点老的问题,但这里有你想要检查的东西。 我们在Spark平台上使用map-reduce实现了连接组件。

https://github.com/kwartile/connected-component

尝试 GraphScope 中内置的 WCC 算法,它完全适合您的需求。

GraphScope是一个分布式图形平台,具有许多现成的算法。

回到您的问题,可以通过3个步骤完成:

  1. 启动 GraphScope 集群
  2. 加载图形
  3. 在其上运行 WCC 并检索结果。

这是代码

import graphscope
sess = graphscope.session(num_workers=4)
graph = sess.g()
graph = graph.add_edges('/path/to/dataset')
result = graphscope.wcc(graph, src=0)
print(result.to_dataframe(selector={'id': 'v.id', 'distance': 'r'})
sess.close()

您可以参考本文来了解如何部署 graphscope,并参考本文来学习如何通过 helm 进行部署。

相关内容

  • 没有找到相关文章

最新更新