Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Spark GraphX ¶Ôͼ½øÐпÉÊÓ»¯
 
×÷Õߣºxuliucheng
  2870  次浏览      27
 2019-10-23 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉܹ¹½¨Ò»¸ö¿ÉÊÓ»¯·ÖÎöͼµÄ Spark Ó¦Ó㬻­Í¼²¢»æÖÆ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚSpark¼¼ÊõÈÕ±¨£¬ÓÉ»ðÁú¹ûÈí¼þç÷ç÷±à¼­¡¢ÍƼö¡£

Spark ºÍ GraphX ¶Ô²¢²»Ìṩ¶ÔÊý¾Ý¿ÉÊÓ»¯µÄÖ§³Ö, ËüÃÇËù¹Ø×¢µÄÊÇÊý¾Ý´¦Àí. µ«ÊÇ, һͼʤǧÑÔ, ÓÈÆäÊÇÔÚÊý¾Ý·ÖÎöʱ. ½ÓÏÂÀ´, ÎÒÃǹ¹½¨Ò»¸ö¿ÉÊÓ»¯·ÖÎöͼµÄ Spark Ó¦ÓÃ. ÐèÒªÓõ½µÄµÚÈý·½¿âÓÐ:

GraphStream: ÓÃÓÚ»­³öÍøÂçͼ

BreezeViz: Óû§»æÖÆÍ¼µÄ½á¹¹»¯ÐÅÏ¢, ±ÈÈç¶ÈµÄ·Ö²¼.

ÕâЩµÚÈý·½¿â¾¡¹Ü²¢²»ÍêÃÀ, ¶øÇÒÓÐЩÏÞÖÆ, µ«ÊÇÏà¶ÔÎȶ¨ºÍÒ×ÓÚʹÓÃ.

°²×° GraphStream ºÍ BreezeViz

ÒòΪÎÒÃÇÖ»ÐèÒª»æÖƾ²Ì¬ÍøÂç, ËùÒÔÏÂÔØ core ºÍ UI Á½¸ö JAR ¾Í¿ÉÒÔÁË.

gs-core-1.2.jar

gs-ui-1.2.jar

breeze Ò²ÐèÒªÁ½¸ö JAR:

breeze_2.10-0.9.jar

breeze-viz_2.10-0.9.jar

ÓÉÓÚ BreezeViz ÊÇÒ»¸ö Scala ¿â, ËüÒÀÀµÁËÁíÒ»¸ö½Ð×ö JfreeChart µÄ Java ¿â, ËùÒÔÒ²ÐèÒª°²×°:

jcommon-1.0.16.jar

jfreechart-1.0.13.jar

¿ÉÒÔµ½ maven ²Ö¿âÈ¥ÏÂÔØ, ÏÂÔØÍê³Éºó·Åµ½ÏîÄ¿¸ùĿ¼Ï lib Îļþ¼Ðϼ´¿É. Óà sbt À´¹ÜÀíÒÀÀµ±È½Ï·½±ã, ËùÒÔÎÒʹÓà sbt À´°²×°ÕâЩÒÀÀµ:

// Graph Visualization

// https://mvnrepository.com/artifact/org. graphstream/gs-core

libraryDependencies += "org.graphstream" % "gs-core" % "1.2"

// https://mvnrepository.com/artifact/org. graphstream/gs-ui

libraryDependencies += "org.graphstream" % "gs-ui" % "1.2"

// https://mvnrepository.com/artifact/org. scalanlp/breeze_2.10

libraryDependencies += "org.scalanlp" % "breeze_2.11" % "0.12"

// https://mvnrepository.com/artifact/org.scalanlp /breeze-viz_2.11

libraryDependencies += "org.scalanlp" % "breeze-viz_2.11" % "0.12"

// https://mvnrepository.com/artifact/org.jfree/jcommon

libraryDependencies += "org.jfree" % "jcommon" % "1.0.24"

// https://mvnrepository.com/artifact/org.jfree /jfreechart

libraryDependencies += "org.jfree" % "jfreechart" % "1.0.19"

»­Í¼

µ¼Èë

ÔÚµ¼Èë»·½ÚÐèҪעÒâµÄÊÇ, Èç¹ûÊÇÓë GraphX µÄ Graph һͬʹÓÃ, ÔÚµ¼Èëʱ½« graphstream µÄ Graph ÖØÃüÃûΪ GraphStream, ·ñÔò¶¼½Ð Graph »áÓÐÃüÃû¿Õ¼äÉϵijåÍ». µ±È», Èç¹ûֻʹÓÃÒ»¸ö¾ÍÎÞËùνÁË.

import org.graphstream.graph. {Graph => GraphStream}

»æÖÆ

Ê×ÏÈÊÇʹÓà GraphX ¼ÓÔØÒ»¸öͼ, È»ºó½«Õâ¸öͼµÄÐÅÏ¢µ¼Èë graphstream µÄͼÖнøÐпÉÊÓ»¯. ¾ßÌåÊÇ:

´´½¨Ò»¸ö SingleGraph ¶ÔÏó, ËüÀ´×Ô graphstream:

val graph: SingleGraph = new SingleGraph
("visualizationDemo")

ÎÒÃÇ¿ÉÒÔµ÷Óà SingleGraph µÄ addNode ºÍ addEdge ·½·¨À´Ìí¼Ó½ÚµãºÍ±ß, Ò²¿ÉÒÔµ÷Óà addAttribute ·½·¨À´¸øÍ¼, »òÊǵ¥¶ÀµÄ±ßºÍ¶¥µãÀ´ÉèÖÿÉÊÓ»¯ÊôÐÔ. graphsteam API ·Ç³£ºÃµÄÒ»µãÊÇ, Ëü½«Í¼µÄ½á¹¹ºÍ¿ÉÊÓ»¯ÓÃÒ»¸öÀà CSS µÄÑùʽÎļþÍêÈ«·ÖÀëÁË¿ªÀ´, ÎÒÃÇ¿ÉÒÔͨ¹ýÕâ¸öÑùʽÎļþÀ´¿ØÖÆ¿ÉÊÓ»¯µÄ·½Ê½. ±ÈÈç, ÎÒÃÇн¨Ò»¸ö stylesheet Îļþ²¢·Åµ½Óû§Ä¿Â¼Ï嵀 style ÎļþÏÂÃæ:

node {

fill-color: #a1d99b;

size: 20px;

text-size: 12;

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;

}

ÉÏÃæµÄÑùʽÎļþ¶¨ÒåÁ˽ڵãÓë±ßµÄÑùʽ, ¸ü¶àÄÚÈݿɼûÆä ¹Ù·½Îĵµ£¨ http://graphstream-project.org/doc/Tutorials/Graph-Visualisation/£©.

×¼±¸ºÃÑùʽÎļþÒÔºó, ¾Í¿ÉÒÔʹÓÃËü:

// Set up the visual attributes for graph visualization

graph.addAttribute("ui.stylesheet",
"url(file:/home/xlc/style/stylesheet)")

graph.addAttribute("ui.quality")

graph.addAttribute("ui.antialias")

ui.quality ºÍ ui.antialias ÊôÐÔÊǸæËßäÖȾÒýÇæÔÚäÖȾʱÒÔÖÊÁ¿ÎªÏȶø·ÇËÙ¶È. Èç¹û²»ÉèÖÃÑùʽÎļþ, ¶¥µãÓë±ßĬÈÏäÖȾ³öÀ´µÄЧ¹ûÊǺÚÉ«.

¼ÓÈë½ÚµãºÍ±ß. ½« GraphX Ëù¹¹½¨Í¼µÄ VertexRDD ºÍ EdgeRDD ÀïÃæµÄÄÚÈݼÓÈëµ½ GraphStream µÄͼ¶ÔÏóÖÐ:

// Given the egoNetwork, load the graphX vertices
into GraphStream
for ((id,_) <- egoNetwork.vertices.collect()) {
val node = graph.addNode(id.toString).asInstanceOf [SingleNode]
}
// Load the graphX edges into GraphStream edges
for (Edge(x,y,_) <- egoNetwork.edges.collect()) {
val edge = graph.addEdge
(x.toString ++ y.toString, x. toString, y.toString,true)
.asInstanceOf[AbstractEdge]
}

¼ÓÈë¶¥µãʱ, Ö»ÐèÒª½«¶¥µãµÄ vertex ID ת»»³É×Ö·û´®´«Èë¼´¿É.

¶ÔÓÚ±ß, ÉÔÏÔÂé·³. addEdge µÄ API ÎĵµÔÚ ÕâÀï, ÎÒÃÇÐèÒª´«Èë 4 ¸ö²ÎÊý. µÚÒ»¸ö²ÎÊýÊÇÿÌõ±ßµÄ×Ö·û´®±êʶ·û, ÓÉÓÚÔÚ GraphX Ô­ÓеÄͼÖв¢²»´æÔÚ, ËùÒÔÎÒÃÇÐèÒª×Ô¼º´´½¨. ×î¼òµ¥µÄ·½Ê½Êǽ«ÕâÌõ±ßµÄÁ½¸ö¶ËµãµÄ vertex ID Á¬½ÓÆðÀ´.

×¢Òâ, ÔÚÉÏÃæµÄ´úÂëÖÐ, ΪÁ˱ÜÃâÎÒÃÇµÄ scala ´úÂëÓë Java ¿â GraphStream »¥ÓÃÉϵÄһЩÎÊÌâ, ²ÉÓÃÁËСµÄ¼¼ÇÉ. ÔÚ GraphStream µÄ org.graphstream.graph.implementations.AbstractGraph API oÎĵµÖÐ, addNode ºÍ addEdge ·Ö±ð·µ»Ø¶¥µãºÍ±ß. µ«ÊÇÓÉÓÚ GraphStream ÊÇÒ»¸öµÚÈý·½µÄ Java ¿â, ÎÒÃDZØÐëÇ¿ÖÆÊ¹Óà asInstanceOf[T], ÆäÖÐ [T] Ϊ SingleNode ºÍ AbstractEdge, ×÷Ϊ addNode ºÍ addEdge µÄ·µ»ØÀàÐÍ. Èç¹ûÎÒÃÇ©µôÁËÕâЩÏÔʽµÄÀàÐÍת»», ¿ÉÄÜ»áµÃµ½Ò»¸öÆæ¹ÖµÄÒì³£:

java.lang.ClassCastException:
org.graphstream.graph.implementations. SingleNode cannot
be cast to scala.runtime.Nothing$

ÏÔʾͼÏñ

graph.display()

ÍêÕûʾÀý:

object Visualization {

def main(args: Array[String]): Unit = {

val sparkConf = new SparkConf()

.setAppName("GraphStreamDemo")

.set("spark.master", "local[*]")

val sc = new SparkContext(sparkConf)

val graph: SingleGraph = new SingleGraph ("graphDemo")

val vertices: RDD[(VertexId, String)] = sc.
parallelize(List(

(1L, "A"),

(2L, "B"),

(3L, "C"),

(4L, "D"),

(5L, "E"),

(6L, "F"),

(7L, "G")))

val edges: RDD[Edge[String]]=sc.parallelize(List(

Edge(1L, 2L, "1-2"),

Edge(1L, 3L, "1-3"),

Edge(2L, 4L, "2-4"),

Edge(3L, 5L, "3-5"),

Edge(3L, 6L, "3-6"),

Edge(5L, 7L, "5-7"),

Edge(6L, 7L, "6-7")))

val srcGraph = Graph(vertices, edges)

graph.setAttribute("ui.stylesheet",
" url(file:/home/hadoop/style/stylesheet)")

graph.setAttribute("ui.quality")

graph.setAttribute("ui.antialias")

// load the graphx vertices into GraphStream

for ((id, _) <- srcGraph.vertices.collect()){

val node = graph.addNode(id.toString). as InstanceOf [SingleNode]

}

// load the graphx edges into GraphStream edges

for (Edge(x, y, _) <- srcGraph.edges.collect()){

val edge = graph.addEdge

(x.toString ++ y.to String, x.toString,

y.toString, true). asInstanceOf[AbstractEdge]

}

graph.display()

}

}

ÖÁ´Ë, Ò»¸ö¼òµ¥µÄʾÀýÍê³É. ¸ü¶àʵÓõÄÄÚÈÝ¿É×ÔÐÐÑо¿.

Ŀǰ, Èç¹û²»ÏûºÄ´óÁ¿µÄ¼ÆËã×ÊÔ´, ¶ÔÓÚ´ó¹æÄ£µÄÍøÂçͼ»æÖÆÈÔȻȱ·¦Ò»¸öÓÐÁ¦µÄ¹¤¾ß. ÀàËÆµÄ¹¤¾ßÓÐ:

snap: »ùÓÚ GraphViz ÒýÇæ.

Gephi: ËüÊǽ»»¥Ê½µÄ¿ÉÊÓ»¯¹¤¾ß, ¾¡¹ÜËüÓÐд¶à¼¶²¼¾ÖºÍÄÚÖà 3D äÖȾÒýÇæÕâÑùµÄÌØÉ«, µ«ÊÇÈÔÈ»ÓÐЩ¸ß CPU ºÍÄÚ´æµÄÐèÇó.

ÁíÍâ, zeepelin Ò²¿ÉÓë Spark ¼¯³É, ¿É×ÔÐÐÁ˽â.

ͼµÄ·Ö²¼Ê½»òÕß²¢Ðд¦ÀíÆäʵÊǰÑͼ²ð·Ö³ÉºÜ¶àµÄ×Óͼ£¬È»ºó·Ö±ð¶ÔÕâЩ×Óͼ½øÐмÆË㣬¼ÆËãµÄʱºò¿ÉÒÔ·Ö±ðµü´ú½øÐзֽ׶εļÆË㣬¼´¶Ôͼ½øÐв¢ÐмÆËã¡£ÏÂÃæÎÒÃÇ¿´Ò»ÏÂͼ¼ÆËãµÄ¼òµ¥Ê¾Àý£º

   
2870 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ