一种图结构的数据可视化方法

GraphStream是构建在Spark GraphX之上的第三方图可视化工具。它虽然不属于Spark项目,但对GraphX的支持很好,而且和GraphFrame也能完美兼容。
网上基于GraphX构建的可视化例子已经很多了。
本文演示一下基于GraphFrame的可视化方法。
导入依赖:

        <dependency>
            <groupId>graphframes</groupId>
            <artifactId>graphframes</artifactId>
            <version>0.8.2-spark2.4-s_2.11</version>
        </dependency>
        <dependency>
            <groupId>org.graphstream</groupId>
            <artifactId>gs-core</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.graphstream</groupId>
            <artifactId>gs-ui</artifactId>
            <version>1.2</version>
        </dependency>

代码:
line5: stylesheet.css是用户自定义的外部样式,也可以不写。
line9: v.get(1)代表顶点DataFrame的第二列,在图中显示它的属性值。
line2: directed变量代表是否为有向图。

   //图的可视化
    def displayGraph(graphframe: GraphFrame, directed: Boolean): Unit = {

      val graphStream: SingleGraph = new SingleGraph("GraphStream")
      graphStream.addAttribute("ui.stylesheet", "url(file:src/main/resources/stylesheet.css)")
      // 加载顶点到可视化图对象中
      graphframe.vertices.collect().foreach { v =>
        val node = graphStream.addNode(v.getAs(“id”).toString).asInstanceOf[SingleNode]
        node.setAttribute("ui.label", v.get(1).toString)
      }
      //加载边到可视化图对象中
      var id: Int = 0
      graphframe.edges.collect().foreach { e =>
        id += 1
        val edge = graphStream.addEdge(id.toString,
          e.getAs("src").toString, e.getAs("dst").toString, directed)
          .asInstanceOf[AbstractEdge]
        edge.addAttribute("ui.label", e.getAs("attr").toString)
      }
      //显示
      graphStream.display()

    }

效果:


图可视化.png

附:css样式文件

node {
   fill-color: #a1d99b;
   size: 30px;
   text-size: 15;
   text-alignment: at-right;
   text-padding: 2;
   text-background-color: #fff7bc;
}
edge {
   shape: cubic-curve;
   fill-color: #dd1c77;
   z-index: 0;
   text-background-mode: rounded-box;
   text-background-color: #fff7bc;
   text-alignment: above;
   text-padding: 2;
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容