2016-08-03 5 views
5

저는 Spark의 Graphx에서 생성 된 그래프를 시각화 할 방법을 찾고 있습니다. 내가 아는 한 Graphx에는 시각화 방법이 없으므로 Graphx에서 다른 그래프 라이브러리로 데이터를 내보낼 필요가 있지만 여기에 붙어 있습니다. 나는이 웹 사이트를 만났다 : https://lintool.github.io/warcbase-docs/Spark-Network-Analysis/ 그러나 도움이되지 않았다. 어떤 라이브러리를 사용해야하며 그래프를 내보내는 방법.Graphx Visualization

+0

당신은 당신이 필요로하는 형식으로 그래프의 정점과 가장자리 변환이 필요합니다. 이것은 DataFrame을 Higcharts 형식으로 변환하는 repo입니다. https://github.com/knockdata/zeppelin-highcharts –

+0

다른 옵션은 그래프를'GEXF' 형식으로 저장하고'Gephi' (https://gephi.org/) 시각화 시스템에로드하는 것입니다. 불행하게도 GraphX는 기본적으로 해당 형식을 지원하지 않지만 직접 구현할 수도 있습니다. –

답변

6

그래서 당신은 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>" 
} 
에서 gexf이

  1. 저장과 같은 코드를 (그래프 교환 형식을) 뭔가를 할 수있는 <안녕, 시작 = "2">
  2. linkurious.js의 GEXF 플러그인을 사용하여 파일을로드하십시오.
  3. ,210

    예 : http://gregroberts.github.io

    enter image description here

1

당신은 Gephi 또는 zeppelin에서 d3 중 하나를 사용할 수 있습니다. D3.js In Action by Elijah MeeksSpark GraphX in Action by Michael S. Malak

grapxInAction에서 빌려 scalajs에 비행선에서 다음과 같이 이동 줘 확인 :

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> 
""") 
} 
관련 문제