1
我想知道我可以使用不同類型的頂點對GraphX圖進行建模嗎?假設我有以下實體:產品,買方,賣方。我想用這些實體形成一個圖結構作爲頂點。 (例如:以圖形方式顯示由賣家出售並由買家購買的產品。)使用GraphX可以嗎?如果可以,如何? 謝謝!GraphX是否支持同一圖形中不同類型的頂點?
我想知道我可以使用不同類型的頂點對GraphX圖進行建模嗎?假設我有以下實體:產品,買方,賣方。我想用這些實體形成一個圖結構作爲頂點。 (例如:以圖形方式顯示由賣家出售並由買家購買的產品。)使用GraphX可以嗎?如果可以,如何? 謝謝!GraphX是否支持同一圖形中不同類型的頂點?
當然。
頂點用id
和一組屬性表示,它們在頂點之間可以不同。像這樣:
val vertices=Array(
(1L, ("1 property")),
(2L, ("2 properties", 2)),
(3L, ("3 properties", 3, true))
)
val vRDD= spark.parallelize(vertices)
val edges = Array(Edge(1L,2L,1800),Edge(2L,3L,800),Edge(3L,1L,1400))
val eRDD= spark.parallelize(edges)
val graph = Graph(vRDD, eRDD)
graph.vertices.collect.foreach(println)
您可以使用每個頂點的第一個屬性來表示它是什麼類型的頂點。
或者你可以使用一個更正式的方式方法:
class VertexProperty()
case class DocumentProperty(val url: String) extends VertexProperty
case class UserProperty( val name: String) extends VertexProperty
case class SentenceProperty(val index: Int ) extends VertexProperty
val vertices = Array[ (VertexId, VertexProperty) ] (
(1L, DocumentProperty("www.bbc.co.uk")),
(2L, UserProperty("Sam")),
(3L, SentenceProperty(1))
)
val vRDD= spark.parallelize(vertices)
val edges = Array(Edge(1L, 2L, 1800), Edge(2L, 3L, 800), Edge(3L, 1L, 1400))
val eRDD= spark.parallelize(edges)
var graph: Graph[ VertexProperty, Int ] = Graph(vRDD, eRDD)
graph.vertices.collect.foreach {
case (id, DocumentProperty(url)) => println(s"$url")
case _ =>
}
大回答,順便說一句,如果什麼都和ID並不需要的屬性都綽綽有餘?你能否爲這個案件延長你的答案? – vak