这几天在使用微博的数据来做一些分析,我用Spark Graphx来进行微博转发网络的建立。新手刚开始学习Spark Graphx时,可能不会使用Spark Graphx来进行关系网络的建立。下面根据官网的例子来进行讲解.下面是官网的代码:
val users: RDD[(VertexId, (String, String))] =
sc.parallelize(Array((3L, ("rxin", "student")), (7L, ("jgonzal", "postdoc")),
(5L, ("franklin", "prof")), (2L, ("istoica", "prof"))))
// Create an RDD for edges
val relationships: RDD[Edge[String]] =
sc.parallelize(Array(Edge(3L, 7L, "collab"), Edge(5L, 3L, "advisor"),
Edge(2L, 5L, "colleague"), Edge(5L, 7L, "pi")))
// Define a default user in case there are relationship with missing user
val defaultUser = ("John Doe", "Missing")
// Build the initial Graph
val graph = Graph(users, relationships, defaultUser)
含义解释
在上面的代码,首先大家可以看到users,users代表的是关系网络中的点的集合。可以把它理解为关系图的点。比如一个点 (3L, (“rxin”, “student”)),其中3L代表的是这个节点的id号,后面(“rxin”, “student”)这个代表这个点的属性。所以users代表是点的集合,你在写你自己的网络的时候,首先应该先建立一个RDD来表示你的网络中的节点信息。可以按照上面类似代码来进行建立,如果是从外部数据源来进行节点集合的RDD创建的话,那么可以用map,flatmap函数来进行转换。
下面的relationships RDD就是点和点之间的连接边,第三个之表示的是这条有向边的属性。最后的通过Graph来记性关系图的建立。第三个defaultUser代表默认值,如果不需要话,直接 Graph(users, relationships)来进行关系图的创建也可以。通过这些讲解,希望可以帮到你。