def mapVertices[VD2](map:(VertexId, VD)=> VD2): Graph[VD2, ED]
mapVertices
mapEdges
mapTriplets[
使用这些方法不会改变图的结构,所以这些操作符可以利用原有的图的structural indicies。所以不要用graph.vertices.map的方法来实现同样的操作。
mapEdges: transform each edge attribute in the graph using the map function.
实例:注意在mapEdges中使用的函数里,输入参数x是一个Edge对象,返回对象则是Edge的属性对象。在例子中,属性对象的类型并没有改变,(都是String)但属性的值有所变化。也可以变成其它的类型的对象。
val sheyouGraph = graph.mapEdges(x => {if("roommate".equals(x.attr)) "sheyou" else x.attr})
mapVertices: transform each vertex attribute in the graph using the map function
跟mapEdges类似,mapVerticies中传入的对象也是Vertex的实例化对象,返回值也是顶点的属性对象:
val oneAttrGraph = graph.mapVertices((id, attr) => {attr._1+ " is:"+attr._2})
mapTriplets: Transforms each edge attribute using the map function, passing it the adjacent(临近的) vertex attributes as well.
也就是在mapTriplets中,与mapEdges不同的地方仅仅在于可以使用的作为map条件的东西多了邻近的顶点的属性,最终改变的东西仍然是edge的属性。如果转换中不需要根据顶点的属性,就直接用mapEdges就行了。
什么是Triplet:
Triplet的全称是EdgeTriplet,继承自Edge,所代表的entity是:An edge along with the vertex attributes of its neighboring vertices. 一个EdgeTriplet中包含srcId, dstId, attr(继承自Edge)和srcAttr和dstAttr五个属性。