大数据-Spark Graphx

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)

  }
}

结果
在这里插入图片描述

发布了131 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/JavaDestiny/article/details/98470564