我可以在GraphX中更改边的srcId和dstId的值吗?

时间:2015-07-31 07:19:47

标签: scala apache-spark spark-graphx

有没有办法改变边的srcId和dstId的值,因为当我这样做时:

val newGraph = graph.mapEdges(
      e =>
        if(//a condition here) {
          e.srcId*0 + //a value
          e.dstId*0 + //another value
          e.attr*1.0 //so that the attribute will remain the same
        }
    else {
          //another piece of code here
        }
    )

newGraph的srcId和dstId与graph具有相同的值。请注意,if语句中的条件100%(已测试),并且id的新值确实存在于图形中,这意味着新id不会指向不存在的顶点。此外,edge属性的更改适用于该段代码,只有id不会更改。

1 个答案:

答案 0 :(得分:1)

不,mapEdges,与GraphImplmapTripletsmapVertices)上的其他转换相同,仅用于映射属性。引用official documentation

  

使用map函数转换每个edge属性,一次传递整个分区。 (...)并且它应该在每个边的新值上返回一个新的迭代器。新的迭代器元素必须与旧的迭代器元素一一对应。

据我所知,目前无法在不重新创建整个图形的情况下修改源或目的地。