java - Spark GraphX 的 DFS 性能与简单的 Java DFS 实现
问题描述
考虑一个具有 14,000 个顶点和 14,000 个边的图,我想知道为什么 GraphX 比图的 java 实现花费更多的时间来获取从顶点到叶子的所有路径?
java实现:几秒钟
Graphx 实现:几分钟
spark GraphX 真的适合这种处理方式吗?
我的系统:i5-7500 @3.40GHz,8GB RAM
pregel的算法:
val sourceId: VertexId = 42 // The ultimate source
// Initialize the graph such that all vertices except the root have canReach = false.
val initialGraph: Graph[Boolean, Double] = graph.mapVertices((id, _) => id == sourceId)
val sssp = initialGraph.pregel(false)(
(id, canReach, newCanReach) => canReach || newCanReach, // Vertex Program
triplet => { // Send Message
if (triplet.srcAttr && !triplet.dstAttr) {
Iterator((triplet.dstId, true))
} else {
Iterator.empty
}
},
(a, b) => a || b // Merge Message
解决方案
我在 Graphx 上实现一些算法时发生了这种情况,我相信 GraphX 非常适合分布式环境,当您将大图拆分到多台机器上时。但是现在当你说你使用一个节点时,你检查过使用的工人数量吗?执行者人数?每个执行程序使用的内存量?这些配置参数在提高或降低 GraphX 应用程序的性能方面肯定起着重要作用。
推荐阅读
- scala - 如何使用 FS2 中的分类器功能对对象进行分组?
- php - PHP - 获取ajax获取的变量
- php - 如何使用正则表达式仅获取操作数
- ruby-on-rails - 无法将 rails 应用程序推送到 Heroku turbolinks
- java - 如何将某个字符串放入 *if* 并检查它是否是某个单词
- javascript - 如何组合两个返回 Rx Observables 的相似 http 请求?
- node.js - 如何允许电报机器人检查命令的可选参数
- css - 使用 CSS 动画围绕圆圈旋转对象?
- php - PHP中是否有一种简短的方法来表达 $item->foo() 进行回调?
- javascript - casperjs 无法识别存储在 then 语句之间的全局变量