首页 > 解决方案 > GraphX 中具有不同属性的顶点

问题描述

我是 GraphX 的新手,我正在尝试为具有不同属性的图创建顶点。我有一个文件,其中的顶点具有 Id、Type、SongName 和其他具有 Id、Type、Rank、Year 的顶点。它们在同一个文件中。不确定我是否必须拆分它们。我创建了这个 Vertex 类:

class VertexProperty() extends Serializable
case class SongProperty(val vertexType: String, val songName: String) extends VertexProperty
case class BillboardProperty(val vertexType: String, val rank: Int, val year: Int) extends VertexProperty

我正在尝试在这里实现它,但不太确定如何或是否走在正确的轨道上。请问有什么帮助吗?

val BillboardSong: RDD[(VertexId, VertexProperty)] = sc.textFile(vertexBillboardSong).map {
  line =>
    val row = line.split(",")

    (row(0).toLong, row(2))
}

标签: scalaapache-sparkspark-graphx

解决方案


对文件中的顶点类型使用模式匹配。假设两种可能的类型是“歌曲”和“广告牌”:

val BillboardSong: RDD[(VertexId, VertexProperty)] = sc.textFile(vertexBillboardSong).map{ 
  line =>
    val row = line.split(",")
    val id = row(0).toLong
    val vertexType = row(1)

    val prop = vertexType match {
      case "song" => SongProperty(vertexType, row(2))
      case "billboard" => BillboardProperty(vertexType, row(2).toInt, row(3).toInt)
    }
    (id, prop)
}

推荐阅读