为什么在spark graphx的pregel中出现类型不匹配错误?

yqkkidmi  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(472)

我在努力定义 sendMessage graphx中pregel中的函数将每个节点属性发送给其邻居。图表的结构如下:

(1,(4,0.08))
(5,(9,0.9))
...

密钥是node 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))
      }

对于send message函数,我得到以下错误

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

rmbxnbpk

rmbxnbpk1#

问题就在这里:您有一个其nodes属性为的图 (VertexId,Double) 但你已经定义了 e: EdgeTriplet[VertexId, ED] 这是需要纠正的,也是应该纠正的 e: EdgeTriplet[(VertexId,Double), ED] . 这意味着图中的顶点或节点属性 (VertexId,Double) 作为他们的财产。

相关问题