我需要为一个巨大的数据集找到连接的组件。(图为无向图)一个明显的选择是MapReduce。但是我是MapReduce的新手,我没有足够的时间来学习它并自己编写代码。我只是想知道是否有任何现有的API相同,因为这是一个非常常见的问题,在社会网络分析?或者至少如果有人知道任何可靠的(经过测试的)源代码,至少我可以开始自己的实现?谢啦,谢啦
vktxenjb1#
我在博客上为自己写的:http://codingwiththomas.blogspot.de/2011/04/graph-exploration-with-hadoop-mapreduce.html但是MapReduce并不适合进行这些Graph分析。为此,最好使用BSP(批量同步并行),Apache Hama在Hadoop HDFS之上提供了一个很好的图形API。我在这里用MapReduce编写了一个连通分量算法:(思维搜索)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的
kx7yvsdv2#
我真的不知道是否有一个API可以找到强连接组件的方法。但是,我实现了BFS算法来找到从源节点到图中所有其他节点的距离(图是一个有向图,有6500万个节点)。这个想法是在一次迭代中探索每个节点的邻居(距离为1),并将reduce的输出反馈给map,直到距离收敛。Map发出从每个节点可能的最短距离,并从列表中减少更新具有最短距离的节点。我建议检查this out。this could help。这两个链接将为您提供有关map reduce范式中图算法的基本概念(如果您还不熟悉)。本质上,您需要扭曲算法以使用DFS而不是BFS。
tf7tbtn23#
你可能想看看卡内基梅隆大学的Pegasus project。它们使用MapReduce提供了一个高效且优雅的实现。他们还提供了二进制文件、示例和非常详细的文档。实现本身是基于U Kang在2009年提出的广义迭代矩阵向量乘法(GIM-V)。PEGASUS: A Peta-Scale Graph Mining System-实施和观察U Kang,Charalampos E. Tsourakakis,Christos Faloutsos在IEEE国际数据挖掘会议(ICDM 2009)编辑:官方实现实际上限制为21亿个节点(节点ID存储为整数)。我在github上创建了一个分支(https://github.com/placeiq/pegasus)来分享我的补丁和其他增强功能(例如:快速压缩)。
jecbmhm34#
这是一个有点老的问题,但这里有一些你想检查。我们在Spark平台上使用map-reduce实现了连通构件。https://github.com/kwartile/connected-component
qaxu7uf25#
尝试GraphScope中的内置WCC算法,它完全符合您的需求。GraphScope是一个分布式图形平台,它有许多算法可以使用。回到你的问题,它可以通过三个步骤来完成:1.启动GraphScope集群1.加载图表1.在其上运行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()
字符串您可以参考this article来了解如何部署graphscope,以及this article来了解如何通过helm进行部署。
5条答案
按热度按时间vktxenjb1#
我在博客上为自己写的:
http://codingwiththomas.blogspot.de/2011/04/graph-exploration-with-hadoop-mapreduce.html
但是MapReduce并不适合进行这些Graph分析。为此,最好使用BSP(批量同步并行),Apache Hama在Hadoop HDFS之上提供了一个很好的图形API。
我在这里用MapReduce编写了一个连通分量算法:(思维搜索)
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的
kx7yvsdv2#
我真的不知道是否有一个API可以找到强连接组件的方法。但是,我实现了BFS算法来找到从源节点到图中所有其他节点的距离(图是一个有向图,有6500万个节点)。
这个想法是在一次迭代中探索每个节点的邻居(距离为1),并将reduce的输出反馈给map,直到距离收敛。Map发出从每个节点可能的最短距离,并从列表中减少更新具有最短距离的节点。
我建议检查this out。this could help。这两个链接将为您提供有关map reduce范式中图算法的基本概念(如果您还不熟悉)。本质上,您需要扭曲算法以使用DFS而不是BFS。
tf7tbtn23#
你可能想看看卡内基梅隆大学的Pegasus project。它们使用MapReduce提供了一个高效且优雅的实现。他们还提供了二进制文件、示例和非常详细的文档。
实现本身是基于U Kang在2009年提出的广义迭代矩阵向量乘法(GIM-V)。
PEGASUS: A Peta-Scale Graph Mining System-实施和观察U Kang,Charalampos E. Tsourakakis,Christos Faloutsos在IEEE国际数据挖掘会议(ICDM 2009)
编辑:官方实现实际上限制为21亿个节点(节点ID存储为整数)。我在github上创建了一个分支(https://github.com/placeiq/pegasus)来分享我的补丁和其他增强功能(例如:快速压缩)。
jecbmhm34#
这是一个有点老的问题,但这里有一些你想检查。我们在Spark平台上使用map-reduce实现了连通构件。
https://github.com/kwartile/connected-component
qaxu7uf25#
尝试GraphScope中的内置WCC算法,它完全符合您的需求。
GraphScope是一个分布式图形平台,它有许多算法可以使用。
回到你的问题,它可以通过三个步骤来完成:
1.启动GraphScope集群
1.加载图表
1.在其上运行WCC并检索结果。
这是密码
字符串
您可以参考this article来了解如何部署graphscope,以及this article来了解如何通过helm进行部署。