Spark Graphx
Spark Graphx是Spark的一个模块,主要用于进行以图为核心的计算,还有分布式图计算。Graphx底层基于RDD计算,和RDD共用一种存储形态。在展示形态上,可以用数据集来表示,也可以用图来表示
Spark Graphx的抽象
(1)顶点
RDD[(VertexId,VD)]表示
VertexId代表了顶点的ID,是Long类型
VD是顶点的属性,可以是任何类型
(2)边
RDD[Edge[ED]]表示
Edge表示一个边,包含一个ED类型参数来设定属性。另外,边还包含了源顶点ID和目标顶点ID
(3)三元组
三元组结构用RDD[EdgeTriplet[VD,ED]]表示
三元组包含一个边、边的属性、源顶点ID、源顶点属性、目标顶点ID、目标顶点属性高
(4)图
Graph表示,通过顶点和边来构建
Spark Graphx的样例
Scala代码package Spark
import org.apache.log4j.{Level, Logger}
import org.apache.spark.graphx.{Edge, Graph}
import org.apache.spark.{SparkConf, SparkContext}
object SparkGraph {
def main(args: Array[String]): Unit = {
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
//创建Spark的配置
val conf = new SparkConf().setAppName("Graph").setMaster("local")
//实例化SparkContext
val sc = new SparkContext(conf)
//定义点
val spot = sc.parallelize(Array((2L,("Lily","post")),(3L,("Tom","student")),(5L,("Andy","post")),(7L,("Mary","student"))))
//定义边
val edge = sc.parallelize(Array(Edge(2L,5L,"Colleague"),Edge(5L,3L,"Advisor"),Edge(5L,7L,"PI"),Edge(3L,7L,"Coll")))
//构建图
val graph = Graph(spot,edge)
//统计Post的数量
val post_Count = graph.vertices.filter{case (id,(name,pos)) => pos == "post"}.count()
//打印结果
println("post count is "+post_Count)
//统计边的数量(起始的ID大于终点的ID)
val edge_Count = graph.edges.filter(e => e.srcId > e.dstId).count()
//打印结果
println("the value is "+edge_Count)
}
}
结果