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
5
A
cevap
6
Yani Manning | Spark GraphX in Action
dan gexf için budef 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>" }
- Kaydet gibi kod (grafik takas biçimi) bir şeyler yapabiliriz
- Dosyayı yüklemek için linkurious.js adresindeki GEXF eklentisini kullanın.
Örnek: http://gregroberts.github.io
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>
""")
}
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 –
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. –