一種圖結(jié)構(gòu)的數(shù)據(jù)可視化方法

GraphStream是構(gòu)建在Spark GraphX之上的第三方圖可視化工具。它雖然不屬于Spark項目,但對GraphX的支持很好,而且和GraphFrame也能完美兼容。
網(wǎng)上基于GraphX構(gòu)建的可視化例子已經(jīng)很多了。
本文演示一下基于GraphFrame的可視化方法。
導(dǎo)入依賴:

        <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;
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容