我有一个字符串的ArrayBuffer,它包含我想要创建的图形的所有顶点的标签。我需要创建一个RDD对象[(VertexId, String)]
,它将成为我未来图形的节点,其中每个节点的VertexId = ArrayBuffer中节点标签的索引。
我只找到了有关使用SparkContext.textFile(String fname)
创建RDD的信息,但没有提到如何从数据结构创建RDD。
有没有办法做到这一点,还是我总是要从文件创建RDD?
答案 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)]