【问题标题】:Spark-GraphX: create anRDD from an ArrayBuffer of StringSpark-GraphX:从字符串的 ArrayBuffer 创建一个 RDD
【发布时间】:2016-01-16 19:44:44
【问题描述】:

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

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

【问题讨论】:

  • 既然您发现“没有关于如何从数据结构创建 RDD”,我假设您不知道 Spark 的 scaladocs。这些对于使用 Spark 和 scala 非常重要——它们可以在这里找到。 spark.apache.org/docs/latest/api/scala/…

标签: scala apache-spark rdd


【解决方案1】:

你要找的是parallelize方法:

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[(VertedId,String)] 类型的问题中描述的一样,distData 将是 RDD[(VertedId,String)]

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2016-08-14
    相关资源
    最近更新 更多