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

时间:2015-10-18 12:21:01

标签: scala apache-spark rdd

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

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

1 个答案:

答案 0 :(得分:1)

您正在寻找的是并行化方法:

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

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

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

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

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

如果您的数组缓冲就像类型ArrayBuffer[(VertedId,String)]的问题中描述的那样,distData将是RDD[(VertedId,String)]