首页 > 解决方案 > RDD[(Long, Node)] 如何访问和更新?

问题描述

所以我试图创造这样的东西:

val initVertices  = initGraph.vertices
val vertices  : RDD[(Long, Node)] = initVertices.map{v =>
  val vId  = v._1.toLong
  val vData  = new Node(vId)
  vData.id = vId
  Tuple2(vId , vData)
}

我试图为“顶点”中的每个元素访问 Node.weight 并尝试更新值,有人可以帮我吗?十分感谢..

*ps:我是 scala 和 spark 的新手

标签: scalaapache-spark

解决方案


也许您需要创建案例类 Node,查看 Node 案例类的方法副本,它可以从存在创建另一个 Node,但具有一些新值:

import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD

case class Node(id: Long, weight: Long)

val initGraph: Graph[Long, Any] = ???
val initVertices: VertexRDD[Long] = initGraph.vertices
val vertices: RDD[(Long, Node)] = initVertices.map{
  case (vertexId: VertexId, value: Long) =>
    val vId = vertexId
    val vData = Node(vId, value)
    (vId , vData)
}
val nodeA = Node(1L, 1L)
val nodeB = nodeA.copy(id = 2L)

推荐阅读