问题标签 [spark-graphx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hbase - GraphX - 存储和计算超过 30 亿个顶点的最佳方式
我是 Spark 和 GraphX 的新手。到目前为止,我一直在使用 Titan DB(HBase 存储)和 Giraph 进行处理。我需要一个包含约 30 亿个顶点和约 50 亿条边的图。存储图形的最佳方法是什么(通过添加顶点和边从头开始创建图形,另外我想远离 Titan API 来创建图形)。我无法找到任何与此相关的直接文档。您能否建议我使用 GraphX 和商用硬件创建/存储我的图形和流程的最佳方式是什么?
谢谢。
scala - 如何从 HCatalog 中的顶点和边表创建顶点和边 RDD 以在 GraphX 中使用
我有一个名为 vertex_table 的表存储在 HCatalog 中,其中包括一个 vertex_id 类型 Long、vertex_name 类型 String、vertex_label 类型 String。我还在 HCatalog 中存储了一个名为 edge_table 的表,其中包括以下字段:ida 类型 Long、idb 类型 Long 和 edge_label 类型 String。
从 Spark 中的 scala REPL shell,我可以使用 hiveContext 成功查询这些表。例如:
我想从这两个表中创建一个 Apache Spark GraphX 图。
我在 Spark、GraphX 和 scala 方面处于新手级别。因此,我将使用 scala 脚本从 Spark 的 hyveContext 中可用的 HCatalog 表中创建顶点和边 RDD 得到帮助。从 HCatalog vertex_table 创建顶点 RDD 的示例就足够了。
我自己的实验导致以下错误:
neo4j - Neo4j 或 GraphX / Giraph 选择什么?
刚刚开始我对图形处理方法和工具的探索。我们基本上所做的 - 计算一些标准指标,如 pagerank、聚类系数、三角形计数、直径、连接性等。过去对 Octave 很满意,但是当我们开始使用假设为 10^9 个节点/边的图时,我们卡住了.
因此,可能的解决方案可以是使用 Hadoop/Giraph、Spark/GraphX、Neo4j 等构建的分布式云。
但是由于我是初学者,有人可以建议实际选择什么吗?什么时候使用 Spark/GraphX 和什么时候使用 Neo4j,我没有得到区别?现在我考虑 Spark/GraphX,因为它有更多类似 Python 的语法,而 neo4j 有自己的 Cypher。neo4j 中的可视化很酷,但在如此大规模的情况下没有用。我不明白是否有理由使用额外级别的软件(neo4j)或只使用 Spark/GraphX?因为我知道 Neo4j 不会像我们使用纯 hadoop vs Giraph 或 GraphX 或 Hive 那样节省那么多时间。
谢谢你。
scala - 修改 spark GraphX pageRank 以重新启动随机游走
我正在尝试通过修改 PageRank 算法的 Spark GraphX 实现来实现带重启的随机游走。
}
我相信这(id, oldRank, msgSum) => alpha + (1.0 - alpha) * msgSum
部分应该改变,但我不确定如何改变。我需要将就绪状态概率添加到这一行。
此外,就绪状态概率应该在while
循环之前的某个地方初始化。并且必须在while
循环内上传就绪状态概率。
任何建议,将不胜感激。
scala - Apache Spark 缓存如何处理具有非线性 DAG 的未缓存文件源?
考虑以下示例
我的问题是
如果我不缓存 rdd1 和 rdd2,它们会在“第一次实现”期间重新加载两次吗?
如果我缓存它们,那么它不会复制数据吗?有没有办法临时缓存数据?例如缓存一个分区,直到图被缓存,当图被完全缓存时,然后取消创建它的RDD。那可能吗?
编辑:删除了臃肿的冗长并将问题集中在一个主题上。
scala - 顶点属性继承 - Graphx Scala Spark
- - 编辑 - -
我的主要问题是我不理解 Graphx 文档中给出的这一段:
在某些情况下,可能希望在同一个图中具有具有不同属性类型的顶点。这可以通过继承来实现。例如,要将用户和产品建模为二分图,我们可能会执行以下操作:
在上述情况下,给定每个 UserProperty 和 ProductProperty 的 RDD 以及 EdgeProperty 的 RDD,如何创建 Graph[VertexProperty, String] 类型的图。我正在寻找一个例子。
apache-spark - GraphX 不适用于相对较大的图
我无法处理具有 230M 边的图形。我克隆了 apache.spark,构建了它,然后在集群上尝试了它。
我使用 Spark 独立集群:
图有 231359027 条边。它的文件重量为 4,524,716,369 字节。图表以文本格式表示:
我的代码:
在我运行它之后,我遇到了许多java.lang.OutOfMemoryError: Java heap space
错误,当然我没有得到结果。我的代码有问题吗?还是在集群配置中?因为它适用于相对较小的图形。但对于这张图,它从来没有奏效。(而且我不认为 230M 边缘是太大的数据)
感谢您的任何建议!
解决
我没有为驱动程序放置足够的内存。我已将集群配置更改为:
而且收集所有顶点和边来计算它们也不是一个好主意。这样做很容易:graph.vertices.count
和graph.edges.count
titan - Gremlin - Giraph - GraphX ?在 TitanDb 上
我需要一些帮助来确认我的选择...并了解您是否可以给我一些信息。我的存储数据库是带有 Cassandra 的 TitanDb。我有一个非常大的图表。我的目标是在后者的图表上使用 Mllib。
我的第一个想法:将 Titan 与 GraphX 一起使用,但我没有发现任何东西或正在进行开发...... TinkerPop 还没有准备好。所以我看看 Giraph。TinkerPop,Titan 可以通过 TinkerPop 与 Rexster 交流。
我的问题是:使用 Giraph 有什么好处?Gremlin 似乎也有同样的想法并且是分布式的。
非常感谢您向我解释。我想我不太了解 Gremlin 和 Giraph(或 GraphX)之间的区别。
祝你今天过得愉快。
amazon-web-services - 如何构建正确运行的 GraphX Spark 应用程序以在 EMR 上运行?
我有一个用 Spark GraphX (Scala 2.10) 和其他 Spark 库编写的脚本,用于处理 Wikipedia 转储的 PageRank 分数并检索最高结果。我可以通过将脚本放在示例文件夹中并插入所需的依赖项来让脚本在本地运行。但我找不到将其编译为应用程序以便在 Amazon EC2 上运行的方法。
我努力了:
- 为整个 Spark 项目编译 fat jar,将我的脚本作为一个新类,并从示例运行该类:org.apache.spark.examples.graphx.PageRankGraphX(非常“迂回”的成功编译路径和最终失败集群 - SparkException:应用程序以失败状态完成)。这是我在本地设置中最成功的方法,但我认为我的方法不是标准的。
- 将脚本添加到源代码中的另一个库,例如 GraphX(这使得无法编译 - 找不到许多库项,例如:java.lang.NoClassDefFoundError: com/google/common/util/concurrent/ThreadFactoryBuilder)
- 在没有 Spark 源的情况下构建一个全新的项目,仅在 sbt 文件中添加我的脚本作为源代码以及 Spark 依赖项(例如 Spark 核心、Spark 流、Spark GraphX 等) - 这可以编译,但是当我尝试运行应用程序在运行时失败,因为它缺少几乎所有依赖项的代码(例如 ClassDefNotFoundException:Scala/Serializer)。
我希望有人有一些易于遵循的说明,说明如何运行一个用 GraphX 编写的独立 jar,它将在 Amazon EMR 上处理。我的整个脚本发布在下面 - 如果这是你的,你会怎么做才能让它在 AWS 上运行并生成一个输出文件?我认为这里的任何细节都不太基本:
- 使用我的脚本作为其中的新类构建整个下载的 Spark 项目的正确方法是否正确?如果是这样,在 Spark 源代码中,脚本属于哪个文件夹?
- 还是在全新项目中构建它的正确方法?如果是这样,如何确保 sbt 包含运行时可能需要的每个依赖项,以便应用程序正确运行?
- 否则,如果这些都不正确,我应该如何处理我的脚本才能在 Amazon WS EMR 上成功运行它?我之前在 MR 中运行过集群项目,没有遇到这种麻烦。
我正在尝试运行的脚本如下 - 我可以肯定地确认,当它的所有依赖项都正确编译时,它可以正常工作 - 但是,我的编译版本在 EMR 中的实际工作中仍然失败。
任何你能对此有所了解的人都会非常有帮助。就像我说的那样,我发现我读过的几乎所有教程和指南都缺乏详细程度,所以你能负担得起的越多越好(PS 我已经在 Windows 机器上尝试了以上所有方法)。