我已经使用NetworkX(图形 Python 模块)本机算法构建了一些实现,其中我输出了一些属性,我将它们用于分类目的。
我想将它扩展到分布式环境。我见过很多方法,如neo4j, Graphx, GraphLab。但是,我对此很陌生,因此我想问一下,它们中的哪一个更容易在本地应用图算法(例如节点中心性度量),最好使用 Python。更具体地说,哪个可用选项与NetworkX(易于安装、预制功能/算法、ML 明智)更相关?
我已经使用NetworkX(图形 Python 模块)本机算法构建了一些实现,其中我输出了一些属性,我将它们用于分类目的。
我想将它扩展到分布式环境。我见过很多方法,如neo4j, Graphx, GraphLab。但是,我对此很陌生,因此我想问一下,它们中的哪一个更容易在本地应用图算法(例如节点中心性度量),最好使用 Python。更具体地说,哪个可用选项与NetworkX(易于安装、预制功能/算法、ML 明智)更相关?
好,古老且未解决的问题!据我所知(作为一个图形专家)分布式处理大图有两种不同的方法,有或没有大数据框架的知识。
来自斯坦福大学 Jure Leskovec 小组的SNAP库,它最初使用 C++,但也有 Python API(请检查您是否需要使用 C++ API 或 Python 完成您想做的工作)。使用 snap,您可以在海量网络上做很多事情,而无需任何大数据技术的特殊知识。所以我会说最简单的一个。
仅当您有 Scala 经验时,使用 Apache Graphx 才是美妙的,因为没有 Python 的东西。它带有大量内置算法,包括中心性度量。如果您了解 Scala,那么第二个最简单的方法。
很久以前,当我查看 GraphLab 时,它是商业的。现在我看到它是开源的,所以也许你比我更了解,但根据我过时的知识,我记得它不支持广泛的算法,如果你需要一个不存在的算法,实现起来可能会很复杂。另一方面,它使用很酷的 Python。毕竟,请再次检查它,因为我的知识是 3 年前的。
如果您熟悉大数据框架并使用它们,Giraph和Gradoop是两个不错的选择。两者都做得很好,但您需要了解一些大数据架构,例如使用 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计算g。PySpark 上已经使用 Graphframes 实现了几种算法。我希望我有所帮助。
在分布式和并行图算法方面,2017-2020 年有很多激进的创新。
GraphBLAS本身为创建更高级的算法提供了构建块。
如果您想要更复杂的算法,例如 PageRank 和 ConnectedCompoments,您可以查看LAGraph:一个库和一个用于收集使用 GraphBLAS 的算法的测试工具。
哦,看看gunrock 的 GraphBLAST,如果你有兴趣在你的 GPU 上运行图算法。
由于您使用的是 Python,因此您可能希望将GraphBLAS 用于 Python