2016-06-21 20 views
1

我想知道我可以使用不同类型的顶点对GraphX图进行建模吗?假设我有以下实体:产品,买方,卖方。我想用这些实体形成一个图结构作为顶点。 (例如:以图形方式显示由卖家出售并由买家购买的产品。)使用GraphX可以吗?如果可以,如何? 谢谢!GraphX是否支持同一图形中不同类型的顶点?

回答

4

当然。

顶点用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 _ => 
} 
+0

大回答,顺便说一句,如果什么都和ID并不需要的属性都绰绰有余?你能否为这个案件延长你的答案? – vak

相关问题