Apache spark 为什么我在Spark GraphX中的Pregel中出现类型不匹配错误?

Apache spark 为什么我在Spark GraphX中的Pregel中出现类型不匹配错误?,apache-spark,spark-graphx,Apache Spark,Spark Graphx,我试图在GraphX中的Pregel中定义sendMessage函数,将每个节点属性发送给它的邻居。 该图具有如下结构: (1,(4,0.08)) (5,(9,0.9)) ... 关键是节点ID,每个节点都有一个Tuple2[VertexId,Double]作为其属性,它应该将它们发送给它的邻居。 这是我试图编写的代码: def run[VD, ED: ClassTag](graph: Graph[VD, ED], maxSteps: Int): Graph[VD, ED] = {

我试图在GraphX中的Pregel中定义
sendMessage
函数,将每个节点属性发送给它的邻居。 该图具有如下结构:

(1,(4,0.08))
(5,(9,0.9))
...
关键是节点ID,每个节点都有一个
Tuple2[VertexId,Double]
作为其属性,它应该将它们发送给它的邻居。 这是我试图编写的代码:

def run[VD, ED: ClassTag](graph: Graph[VD, ED], maxSteps: Int): Graph[VD, ED] = {

    val temp_graph: Graph[(VertexId, Double), ED] = graph.mapVertices((x, y)=> (x,1.toDouble))

    def sendMessage(e: EdgeTriplet[VertexId, ED]): Iterator[(VertexId,(VertexId, Double))] = {
        Iterator((e.srcId,e.dstAttr), (e.dstId,e.srcAttr))
      }

对于发送消息功能,我得到以下错误


有人能帮我解决这个错误吗?

问题在这里:您有一个节点属性为
(VertexId,Double)
的图形,但是您已经定义了
e:EdgeTriplet[VertexId,ED]
,需要更正,它应该是
e:EdgeTriplet[(VertexId,Double),ED]
。这意味着图形中的顶点或节点属性将
(VertexId,Double)
作为其属性