GraphFrames 라이브러리를 사용하여 간결하게 표현할 수 있습니다. 먼저 필요한 패키지를 포함시켜야합니다. 스파크 2.0 및 스칼라 2.11에 들어 당신은 conf/spark-defaults.conf
에 spark.jars.packages
에
graphframes:graphframes:0.2.0-spark2.0-s_2.11
을 추가하거나 spark-submit
에 대한 --packages
인수로 전달합니다.
다음으로 Graph
을 GraphFrame
으로 변환해야합니다.
import org.graphframes.GraphFrame
import org.apache.spark.graphx._
val nodes = sc.parallelize(Seq(
(1L, "a"), (2L, "b"), (3L, "c"), (4L, "d"), (5L, "e")))
val edges = sc.parallelize(Seq(
Edge(1L, 2L, 34), Edge(1L, 3L, 23), Edge(2L, 5L, 10),
Edge(3L, 4L, 12), Edge(3L, 3L, 12), Edge(3L, 5L, 11)))
val graph = Graph(nodes, edges)
val graphFrame = GraphFrame.fromGraphX(graph)
GraphFrame
은 사이퍼와 유사한 언어의 패턴을 취 방법을 찾을 제공 : 당신은 fromGraphX
방법을 사용할 수 있습니다.
val pattern = "(x1) - [a] -> (x2); (x2) - [b] -> (x3)"
(_)
노드를 나타내는
및 [_]
가장자리 : 두 개의 홉과 같이 표현 될 수있다.
val paths = graphFrame.find(pattern)
및 select
필드 :
paths.select($"x1.attr", $"x3.attr", $"a.attr" + $"b.attr").show()
당신 경로 패턴을 일치