前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GraphX图计算图处理知识图谱简单可视化核心技术

GraphX图计算图处理知识图谱简单可视化核心技术

作者头像
陈黎栋
发布2020-02-18 09:45:55
1.3K0
发布2020-02-18 09:45:55
举报
文章被收录于专栏:陈黎栋的专栏啦

  准备在CSDN上写一个关于GraphX的专栏,这是第一篇文章。   本文介绍使用GraphX创建一张图并可视化的关键技术,创建好的图存储在Graph[VD,ED]对象中,可视化所使用的技术框架是第三方Java动态图形管理组件GraphStream

可视化效果

  在可视化结果中,使用标签分别在顶点和边的旁边标注了人物的姓名和人物之间的关系,如下图所示。

这里写图片描述
这里写图片描述

编程语言

  GraphX目前只支持Scala编程语言。

核心代码

代码语言:javascript
复制
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD
import org.graphstream.graph.{Graph => GraphStream}
import org.graphstream.graph.implementations._

/**
  * 显示原始图可视化对象
  */
object GraphStreamTest extends App{
  /**
    * configuration of spark
    * Spark配置部分
    */
  val conf = new SparkConf().setAppName("GraphStreamTest")
  conf.setMaster("spark://MacdeMacBook-Pro-3.local:7077")
  val sc = new SparkContext(conf)
  sc.addJar("/Users/mac/Documents/GraphXSurvey/SparkTest/out/artifacts/SparkTest_jar3/SparkTest.jar")

  case class Person(name:String, sex:String)
  case class Link(relationship:String, happenDate:String)
  /**
    * create a graph from files which have specified form
    *
    * @param vertexFilePath file path of vertexs.csv
    * @param edgeFilePath file path of edges.csv
    * @return
    */
  def createGraph(vertexFilePath:String, edgeFilePath:String): Graph[Person,Link] ={
    //读取数据文件
    val vertices = sc.textFile(vertexFilePath)
    val links= sc.textFile(edgeFilePath)
    //构建边、顶点RDD
    val verticesRDD: RDD[(VertexId,Person)] = vertices map {line
    =>
      val row = line split ','
      (row(0).toLong,Person(row(1),row(2)))
    }

    val linksRDD:RDD[Edge[Link]] = links map {line =>
      val row = line split ','
      Edge(row(0).toLong, row(1).toLong, Link(row(2), row(3)))
    }
    //构建图
    val social: Graph[Person,Link] = Graph(verticesRDD, linksRDD)
    return social

  }
  /**
    * the main graph
    */
  var graph:Graph[Person,Link] = createGraph("/Users/mac/Documents/GraphXSurvey/GraphX/SocialNetwork/vertexs.csv","/Users/mac/Documents/GraphXSurvey/GraphX/SocialNetwork/edges.csv")
  graph.cache()



  //创建原始可视化对象
  val graphStream:SingleGraph = new SingleGraph("GraphStream")

  // 设置graphStream全局属性. Set up the visual attributes for graph visualization
  graphStream.addAttribute("ui.stylesheet","url(./style/stylesheet.css)")
  graphStream.addAttribute("ui.quality")
  graphStream.addAttribute("ui.antialias")


  // 加载顶点到可视化图对象中
  for ((id,person:Person) <- graph.vertices.collect()) {
    val node = graphStream.addNode(id.toString).asInstanceOf[SingleNode]
    node.addAttribute("ui.label",id  +"\n"+person.name)
  }
  //加载边到可视化图对象中
  for (Edge(x,y,link:Link) <- graph.edges.collect()) {
    val edge = graphStream.addEdge(x.toString ++ y.toString,
      x.toString, y.toString,
      true).
      asInstanceOf[AbstractEdge]

  }
  //显示
  graphStream.display()

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可视化效果
  • 编程语言
  • 核心代码
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档