大图:NetworkX 分布式替代方案

数据挖掘 机器学习 图表 分散式
2021-10-01 06:51:53

我已经使用NetworkX(图形 Python 模块)本机算法构建了一些实现,其中我输出了一些属性,我将它们用于分类目的。

我想将它扩展到分布式环境。我见过很多方法,如neo4j, Graphx, GraphLab但是,我对此很陌生,因此我想问一下,它们中的哪一个更容易在本地应用图算法(例如节点中心性度量),最好使用 Python。更具体地说,哪个可用选项与NetworkX(易于安装、预制功能/算法、ML 明智)更相关?

3个回答

好,古老且未解决的问题!据我所知(作为一个图形专家)分布式处理大图有两种不同的方法,有或没有大数据框架的知识。

来自斯坦福大学 Jure Leskovec 小组的SNAP库,它最初使用 C++,但也有 Python API(请检查您是否需要使用 C++ API 或 Python 完成您想做的工作)。使用 snap,您可以在海量网络上做很多事情,而无需任何大数据技术的特殊知识。所以我会说最简单的一个。

仅当您有 Scala 经验时,使用 Apache Graphx 才是美妙的,因为没有 Python 的东西。它带有大量内置算法,包括中心性度量。如果您了解 Scala,那么第二个最简单的方法。

很久以前,当我查看 GraphLab 时,它是商业的。现在我看到它是开源的,所以也许你比我更了解,但根据我过时的知识,我记得它不支持广泛的算法,如果你需要一个不存在的算法,实现起来可能会很复杂。另一方面,它使用很酷的 Python。毕竟,请再次检查它,因为我的知识是 3 年前的。

如果您熟悉大数据框架并使用它们,GiraphGradoop是两个不错的选择。两者都做得很好,但您需要了解一些大数据架构,例如使用 hadoop 平台。

附言

1) 我使用简单的 NetworkX 和多处理来分布式处理具有 400,000 个节点的 DBLP 网络,并且效果很好,所以你需要知道你的图有多大。

2)毕竟,我认为SNAP库是一个方便的东西。

目前,Apache 开发了一个名为 PySpark 的强大 API。您可以直接从命令行设置Graphframes 。pyspark从您的 shell 终端启动:

pyspark --packages graphframes:graphframes:0.6.0-spark2.3-s_2.11

您可以完全python使用graphframesAPI 开发代码。试试下面的示例代码

# Create a Vertex DataFrame with unique ID column "id"
v = sqlContext.createDataFrame([
    ("a", "Alice", 34),
    ("b", "Bob", 36),
    ("c", "Charlie", 30),
    ], ["id", "name", "age"])

# Create an Edge DataFrame with "src" and "dst" columns
e = sqlContext.createDataFrame([
    ("a", "b", "friend"),
    ("b", "c", "follow"),
    ("c", "b", "follow"),
    ], ["src", "dst", "relationship"])

# Create a GraphFrame
from graphframes import *
g = GraphFrame(v, e)

# Query: Get in-degree of each vertex.
g.inDegrees.show()

# Query: Count the number of "follow" connections in the graph.
g.edges.filter("relationship = 'follow'").count()

# Run PageRank algorithm, and show results.
results = g.pageRank(resetProbability=0.01, maxIter=20)
results.vertices.select("id", "pagerank").show()

上面我们可以pageRank从 graph计算gPySpark 上已经使用 Graphframes 实现了几种算法。我希望我有所帮助。

GraphBLAS:线性代数语言中的图算法

在分布式和并行图算法方面,2017-2020 年有很多激进的创新。

GraphBLAS本身为创建更高级的算法提供了构建块。

如果您想要更复杂的算法,例如 PageRank 和 ConnectedCompoments,您可以查看LAGraph:一个库和一个用于收集使用 GraphBLAS 的算法的测试工具。

哦,看看gunrock 的 GraphBLAST,如果你有兴趣在你的 GPU 上运行图算法。

由于您使用的是 Python,因此您可能希望将GraphBLAS 用于 Python