0. Graph构建
Graph
对象是用户的操作入口,主要包含edge和vertex两部分。边是由点组成,所以边中所有的点就是点的全集,但这个全集包含了重复的点,去重后就是VertexRDD。
1. 构建图的方法
从边的集合构建图(
Graph.fromEdges
)def fromEdges[VD: ClassTag, ED: ClassTag]( edges: RDD[Edge[ED]], defaultValue: VD, edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY, vertexStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY): Graph[VD, ED]
- 1
- 2
- 3
- 4
- 5
从源点和目的点的元组构建(
Graph.fromEdgeTuples
)def fromEdgeTuples[VD: ClassTag]( rawEdges: RDD[(VertexId, VertexId)], defaultValue: VD, uniqueEdges: Option[PartitionStrategy] = None, edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY, vertexStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY): Graph[VD, Int]
- 1
- 2
- 3
- 4
- 5
- 6
从具有属性的顶点和边的RDD构建(
Graph()
)def apply[VD: ClassTag, ED: ClassTag]( vertices: RDD[(VertexId, VD)], edges: RDD[Edge[ED]], defaultVertexAttr: VD = null.asInstanceOf[VD], edgeStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY, vertexStorageLevel: StorageLevel = StorageLevel.MEMORY_ONLY): Graph[VD, ED]
- 1
- 2
- 3
- 4
- 5
- 6
三种方法最后都是调用了伴生对象GraphImpl
的apply()
方法,主要包括edgeRDD
和vertexRDD
的构建,vertexRDD
是从edgeRDD
基础上构建起来的。
def apply[VD: ClassTag, ED: ClassTag]( vertices: RDD[(VertexId, VD)], edges: RDD[Edge[ED]], defaultVertexAttr: VD, edgeStorageLevel: StorageLevel, vertexStorageLevel: StorageLevel): GraphImpl[VD, ED] = { val edgeRDD = EdgeRDD.fromEdges(edges)(classTag[ED], classTag[VD]) .withTargetStorageLevel(edgeStorageLevel) val vertexRDD = VertexRDD(vertices, edgeRDD, defaultVertexAttr) .withTargetStorageLevel(vertexStorageLevel) GraphImpl(vertexRDD, edgeRDD) }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8