Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何根据邻接矩阵有效地更新权值?_Scala_Apache Spark_Graph_Spark Graphx - Fatal编程技术网

Scala 如何根据邻接矩阵有效地更新权值?

Scala 如何根据邻接矩阵有效地更新权值?,scala,apache-spark,graph,spark-graphx,Scala,Apache Spark,Graph,Spark Graphx,我有一个很大的图表。节点之间存在链接的位置。每条边的初始权重为1。我必须根据变换后的邻接矩阵更新边的权重 其中A是邻接矩阵。节点(i,j)中的新权重将由M(i,j)给出 我必须用Graphx做这个。我如何处理这个问题 我的方法:找到每个节点的所有相邻节点,内部节点成对地连接它们。然后更新每个节点的权重 但我对用Graphx编写高效代码有点困惑。 我该怎么做呢?欢迎使用代码快照。有关使用GraphX高效处理稀疏矩阵的示例,请参阅GraphX实现SVD++的源代码 基本上,它只使用aggrega

我有一个很大的图表。节点之间存在链接的位置。每条边的初始权重为1。我必须根据变换后的邻接矩阵更新边的权重

其中A是邻接矩阵。节点(i,j)中的新权重将由M(i,j)给出

我必须用Graphx做这个。我如何处理这个问题

我的方法:找到每个节点的所有相邻节点,内部节点成对地连接它们。然后更新每个节点的权重

但我对用Graphx编写高效代码有点困惑。
我该怎么做呢?欢迎使用代码快照。

有关使用GraphX高效处理稀疏矩阵的示例,请参阅GraphX实现SVD++的源代码

基本上,它只使用aggregateMessages(),因此邻接矩阵中每个非零值项都会向相邻顶点发送一条消息——从而避免甚至考虑(处理)邻接矩阵的零值项

编辑(其他信息):

首先,您必须计划在每个顶点存储什么,以及如何收集这些信息以最终生成M(i,j)。请注意,分母中的两个规范| A(:,i)|和| A(:,j)|重复使用。如果图中有n个顶点(即,如果A是nxn矩阵),那么即使要计算n2 M(i,j),也只有n | A(:,i)|

一个好的计划是每个顶点i存储两个向量(例如,在两个数组[Double]的Tuple2中):| A(:,i)|和[,…,](称之为Vi)。最后,通过从graph.vertices()中提取此信息并将其组合生成M来计算M

|A(:,i)|很容易。对于每个顶点i,这只是入站边的数量。(要了解这一点,请思考A作为邻接矩阵的意义,并绘制一张图表。)

Vi有点棘手,但也不过分。首先,对于每个顶点,我们需要得到一个向量,而不是像对| a(:,i)|那样的一个数字。长度为n的向量的每个分量需要n个输入


回想一下邻接矩阵背后的含义,为了计算Vi的第j个分量(即n个乘积的和),我们只需要在某个顶点k与i和j都有边时加上1。因此,您可以采取的一种方法是在一行中使用aggregateMessages两次:沿边向后传输相邻顶点。使用一些非常松散的术语:首先从j顶点到k顶点,然后从k顶点到i顶点。这样,每个顶点在两个跃点内都知道它的所有邻居(如果A是稀疏的,每个顶点都可以积累这么多信息)。这将允许您计算Vi.

除了“给我代码”之外,您的实际问题是什么?当您提交代码时,我们是否可以在您的课堂上共享
A
?为什么它需要是graphx?@TheArchetypalPaul,我正在实现基于纸张的子图查找算法。第一步是根据上述公式将邻接矩阵转化为加权矩阵。我不知道如何高效地编写代码来更新图的边权重。所以我的问题是,你能指导我如何将邻接矩阵转换成M矩阵并更新权重吗?对我来说,这听起来仍然像是“给我代码”。你尝试过什么,或者你在哪里遇到了@MichaelMalak的答案?谢谢你的回复。当我想要更新边的权重时,聚合消息会起作用。但我想计算两列邻接矩阵的余弦,如公式所示,并更新相应的权重。那么我该如何做到这一点呢?更新了我的答案,概述了可能的具体方法。