Spark graphFrames-标签传播与牢固连接的组件

时间:2020-06-10 18:27:58

标签: apache-spark graphframes

https://docs.databricks.com/spark/latest/graph-analysis/graphframes/user-guide-scala.html标准示例中:

  • 从图纸上直观地查看它们时,强连接的组件在计算上似乎是合理的。

enter image description here

  • 因此,我对标签传播检测到“社区”感到惊讶。

enter image description here

我想念什么? [A,D,E]从数据来看,我也会认为也是一个社区,其结果将是相似的。我尝试了更多的周期。标签传播似乎是“聚类”的可怜表亲。

1 个答案:

答案 0 :(得分:2)

您在这里发现的是称为标签振荡的已知现象,当标签被同步更新并且(子)图形具有二部结构(或星形图)时,就会发生这种现象。这两个社区将无休止地交换其标签,LPA将永远不会自行终止。

t处的标签: oscillation at t

t + 1时的标签: oscillation at t+1

t + 2时的标签: oscillation at t

...等等。

正如您已经提到的那样,这实际上不是我们期望的社区检测算法所期望的,因为社区内没有边缘。但这仍然是一种快速算法,可以为非二分体结构提供良好的结果。 Raghavan提出了一种使用异步更新的快速替代方法。但这尚未在Graphframes中实现。 Graphframes调用LPA的graphX实现(请看代码code),该实现使用同步的Pregel(请看代码code)。

除了两部分结构的LPA问题外,SCC和LPA之间还存在一般差异

  • SCC社区:社区的每个节点都知道(具有优势)社区内的所有其他节点。
  • LPA社区:对于社区的每个节点,都有一条路径 (边的顺序)到社区内的所有其他节点 一个社区。