【发布时间】:2016-03-21 16:16:47
【问题描述】:
我正在从基于 MPI 的系统迁移到 Apache Spark。我需要在 Spark 中执行以下操作。
假设,我有n 顶点。我想从这些n 顶点创建一个边列表。一条边只是两个整数 (u,v) 的元组,不需要任何属性。
但是,我想在每个执行程序中独立地并行创建它们。因此,我想为P Spark Executors 独立创建P 边缘数组。每个数组可能有不同的大小并且取决于顶点,因此,我还需要从0 到n-1 的执行程序ID。接下来,我想要一个全局 RDD 边数组。
在 MPI 中,我会使用处理器等级在每个处理器中创建一个数组。如何在 Spark 中做到这一点,尤其是使用 GraphX 库?
因此,我的主要目标是在每个执行器中创建一个边数组,并将它们组合成一个 RDD。
我首先尝试了鄂尔多斯的一个修改版本——人义模型。作为参数,我只有节点数 n 和概率 p。
假设,执行器i 必须处理从101 到200 的节点。对于任何节点说,节点101,它将以概率p创建从101到102 -- n的边。在每个执行程序创建分配的边之后,我将实例化 GraphX EdgeRDD 和 VertexRDD。因此,我的计划是在每个executor中独立创建边缘列表,并将它们合并到RDD中。
【问题讨论】:
-
我对MPI一无所知,但从你的描述中我可以看出你对问题的思考方式太“低级”了。在 Spark 中,您不必担心哪个 executor 存储了哪个数组。只需创建您的 RDD,Spark 就会自动处理数据的分发和处理。我还建议您阅读
GraphX的文档,因为顶点和边需要以某种方式定义才能在GraphX中使用。 -
感谢您的建议。我正在尝试并行实现图形生成器。生成器必须以这样一种方式创建边,以使计算负载得到很好的平衡。
标签: scala apache-spark spark-graphx