2016-08-03 27 views
5

Spark's Graphx'te oluşturulan grafiği görselleştirmenin bir yolunu arıyorum. Bildiğim kadarıyla Graphx'ın herhangi bir görselleştirme yöntemi yok, bu yüzden verileri Graphx'ten başka bir grafik kütüphanesine vermem gerekiyor, ama burada sıkışıp kaldım. Bu web sitesine girdim: https://lintool.github.io/warcbase-docs/Spark-Network-Analysis/ ama yardımcı olmadı. Hangi kütüphaneyi kullanmalı ve grafiğin nasıl dışa aktarılacağını.Graphx Görselleştirme

+0

Kendin biçimine grafiğin köşeler ve kenarlardan dönüştürmek gerekir. Bu DataFrame'i Higcharts formatına dönüştüren bir repo. https://github.com/knockdata/zeppelin-highcharts –

+0

Diğer seçenek, grafiklerinizi "GEXF" biçiminde kaydetmek ve bunları "Gephi" (https://gephi.org/) görselleştirme sistemine yüklemek olacaktır. Ne yazık ki GraphX ​​bu formatı doğal olarak desteklemiyor, ancak bunu kendi başınıza uygulamaya çalışabilirsiniz. –

cevap

6

Yani Manning | Spark GraphX in Action

def toGexf[VD,ED](g:Graph[VD,ED]) : String = { 
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
    "<gexf xmlns=\"http://www.gexf.net/1.2draft\" version=\"1.2\">\n" + 
    " <graph mode=\"static\" defaultedgetype=\"directed\">\n" + 
    " <nodes>\n" + 
    g.vertices.map(v => "  <node id=\"" + v._1 + "\" label=\"" + 
         v._2 + "\" />\n").collect.mkString + 
    " </nodes>\n" + 
    " <edges>\n" + 
    g.edges.map(e => "  <edge source=\"" + e.srcId + 
        "\" target=\"" + e.dstId + "\" label=\"" + e.attr + 
        "\" />\n").collect.mkString + 
    " </edges>\n" + 
    " </graph>\n" + 
    "</gexf>" 
} 
dan gexf için bu

  1. Kaydet gibi kod (grafik takas biçimi) bir şeyler yapabiliriz
    1. Dosyayı yüklemek için linkurious.js adresindeki GEXF eklentisini kullanın.

    Örnek: http://gregroberts.github.io

    enter image description here

1

Eğer Gephi veya zeppelin den d3 birini kullanabilirsiniz. D3.js In Action by Elijah Meeks ve Spark GraphX in Action by Michael S. Malak

bir grapxInAction ödünç scala ve js yılında zeplin itibaren aşağıda gitmek ver edin:

import org.apache.spark.graphx._ 
import scala.reflect.ClassTag 

def drawGraph[VD:ClassTag,ED:ClassTag](g:Graph[VD,ED]) = { 

val u = java.util.UUID.randomUUID 
val v = g.vertices.collect.map(_._1) 
println("""%html 
<div id='a""" + u + """' style='width:960px; height:500px'></div> 
<style> 
.node circle { fill: gray; } 
.node text { font: 10px sans-serif; 
    text-anchor: middle; 
    fill: white; } 
line.link { stroke: gray; 
    stroke-width: 1.5px; } 
</style> 
<script src="//d3js.org/d3.v3.min.js"></script> 
<script> 
.var width = 960, height = 500; 
var svg = d3.select("#a""" + u + """").append("svg") 
.attr("width", width).attr("height", height); 
var nodes = [""" + v.map("{id:" + _ + "}").mkString(",") + """]; 
var links = [""" + g.edges.collect.map(
e => "{source:nodes[" + v.indexWhere(_ == e.srcId) + 
"],target:nodes[" + 
v.indexWhere(_ == e.dstId) + "]}").mkString(",") + """]; 
var link = svg.selectAll(".link").data(links); 
link.enter().insert("line", ".node").attr("class", "link"); 
var node = svg.selectAll(".node").data(nodes); 
var nodeEnter = node.enter().append("g").attr("class", "node") 
nodeEnter.append("circle").attr("r", 8); 
nodeEnter.append("text").attr("dy", "0.35em") 
.text(function(d) { return d.id; }); 
d3.layout.force().linkDistance(50).charge(-200).chargeDistance(300) 
.friction(0.95).linkStrength(0.5).size([width, height]) 
.on("tick", function() { 
link.attr("x1", function(d) { return d.source.x; }) 
    .attr("y1", function(d) { return d.source.y; }) 
    .attr("x2", function(d) { return d.target.x; }) 
    .attr("y2", function(d) { return d.target.y; }); 
node.attr("transform", function(d) { 
return "translate(" + d.x + "," + d.y + ")"; 
}); 
}).nodes(nodes).links(links).start(); 
</script> 
""") 
}