GraphX原理与实践

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
。 。呻 J) collectNeighb rs(EdgeDirecti VertexRDD(Array((graph兑Vertexld, VD) ))
:i) connectedComponentsO: Graph(graphx.Vertexld, ED)
♀ degrees
U) degreesRDD(Edge口 ,recti削. VertexRDD (lntj
class Graph[VD, ED] { def mapVertices[VD2: ClassTag](map: (VertexId, VD) => VD2) (implicit eq: VD =:= VD2 = null): Graph[VD2, ED]
def mapEdges[ED2: ClassTag](map: Edge[ED] => ED2): Graph[VD, ED2] = { mapEdges((pid, iter) => iter.map(map))
vertices , edges, triplets
• @transient val vertices: VertexRDD[VD] ID+点属性 • @transient val edges: EdgeRDD[ED, VD] srcID + dstID + 边属性 • @transient val triplets: RDD[EdgeTriplet[VD, ED]] srcID+src点属性+边属性 + dstID + dst点属性
def mapTriplets[ED2: ClassTag](map: EdgeTriplet[VD, ED] => ED2): Graph[VD, ED2]
!
}
!
保持内部的structural indices,进而而可以重用用。
Structural Operators
class Graph[VD, ED] { def reverse: Graph[VD, ED]
GraphX原理与实践
图计算
计算只考虑邻居节点
基于图的并行行计算框架
• Pregel • Giraph • GraphLab • ……. 共同的特点是抽象出了一一批API,来简化基于图的编程。往往比比一一般data-parallel的系 统的性能要高高很多。
需要不同的系统支支持不同的view
U)pickRar苍白W州rtexO: g叩hx.Vertexld
D 。 prege l(A: Class Tag)恤, i时, EdgeDlrectlonJ((Vertex时, V口,闯叶V口, EdgeTrlplet(咽, ED) => uerat()(((Vertexld,A)), CA,闯=〉叫:“灿(V口, ED)
(!)j inVertices(U:αa臼Tag)(RDD((Verte剧, U)J)((Verte时 , 叨, U) •> VO)。: G raph(VD, ED) numEdges
B 。Ci) numVertlces utDeg rees
© pageRank(Double, Double): Graph(Doub怡, Double)
graph vs table
table operator
• 继承自自Spark中的RDD
graph operator
c;,, GraphOps U)collectEdges(EdgeDire口ion): Vert exRDD(Ar ray(Edge(ED)))
JI cone口Nelghborlds(EdgeDirectlon): VertexRDD(Arrayfgraphx.Vertexid
!
def groupEdges(merge: (ED, ED) => ED): Graph[VD,ED] }
Computing Degree
• inDegrees • outDegrees • degrees
Collecting Neighbors
class GraphOps[VD, ED] { def collectNeighborIds(edgeDirection: EdgeDirection): VertexRDD[Array[VertexId]] def collectNeighbors(edgeDirection: EdgeDirection): VertexRDD[ Array[(VertexId, VD)] ]
@币lter(VD2: OassT吨, ED2: ClassTag)(Graph(V口, ED)•> Graph(VD2, ED2), (EdgeTriplet(VD2, ED2))町Boolean, (Vertextd, VD2)町Boolean): Graph(VD, ED)
。0inOegrees
不同系统?带来的问题
• Hadoop • Hive • Spark • Giraph • GraphLab 需要学习、部署与管理不同的系统
最关键的是效率
1、数据传输与复制带来的开销 2、中间结果与相应结构无无法重用用
解决方方案-GraphX
GraphX统一一了两种view,轻松做pipeline操作
:!) staticPageRank(I时, Double) Graph(D uble, Double)
@引r。咱νConnectedCompo耐nts(lnQ: Graph(graphx.Vertexld, ED)
(U this(GrFra Baidu bibliotekph(V口, ED))
o: :l) triangleCou时 Grapt、(I’”, ED)
Triplets对Vertices和Edges做了join
最原始的方方式构建graph
! ! ! ! !
初步印象—demo
• 构建graph • 删选vertices • 删选edges • 查看triplets
从文文件中加载成graph
• 需要掌握重要的图操作
Property Operators
!
def subgraph( epred: EdgeTriplet[VD,ED] => Boolean = (x => true), vpred: (VertexId, VD) => Boolean = ((v, d) => true))
: Graph[VD, ED]
!
def mask[VD2: ClassTag, ED2: ClassTag](other: Graph[VD2, ED2]): Graph[VD, ED]
相关文档
最新文档