Spark-GraphX:从 String 的 ArrayBuffer 创建一个 RDD

Spark-GraphX: create anRDD from an ArrayBuffer of String

我有一个字符串数组缓冲区,其中包含我要创建的图形的所有顶点的标签。我需要创建一个 RDD 对象 [(VertexId, String)],它将成为我未来图形的节点,其中每个节点的 VertexId = ArrayBuffer 中节点标签的索引。 我只找到有关使用 SparkContext.textFile(String fname) 创建 RDD 的信息,但没有找到有关如何从数据结构创建 RDD 的信息。

有没有办法做到这一点,还是我总是必须从文件创建 RDD?

您要查找的是并行化方法:

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

并行集合是通过在驱动程序(Scala Seq)中的现有集合上调用 SparkContext 的并行化方法来创建的。集合中的元素被复制以形成可以并行操作的分布式数据集。

因此,考虑到您的 ArrayBuffer[(VertexId,String)],您需要先将其转换为 Seq,然后将其作为参数传递给 sc.parallelize

根据 ArrayBuffer scaladoc 你可以直接在你的 arraybuffer 上应用 toSeq 方法。

val distData = sc.parallelize(data.toSeq) // data your arraybuffer.

如果您的 arraybuffer 与 ArrayBuffer[(VertedId,String)] 类型问题中描述的一样,distData 将是 RDD[(VertedId,String)]