【问题标题】:Algorithm to determine clusters of linked nodes in SparkSpark中确定链接节点集群的算法
【发布时间】:2018-08-18 03:39:51
【问题描述】:

假设我有 9 个唯一的数据集,它们以如下方式连接:

start  end
----------
    1    2
    2    3
    4    5
    6    7
    7    8
    7    1
    4    9
    9    5

数据集表示节点图以及它们之间的链接。例如,给定的链接表示为两个集群:一个有 6 个节点,一个有 3 个节点。

CLUSTER 1        CLUSTER 2

1 --- 2 --- 3    4 --- 5
|                 \___ |
|                     \|
7 --- 6                9
|
|
8

我想要一个高效的算法将边缘聚集在一起,如下所示:

node  cluster
-------------
   1        1
   2        1
   3        1
   4        2
   5        2
   6        1
   7        1
   8        1
   9        2

问题是我有很多这样的边缘,而我目前的算法很慢。假设这些数据集在 Spark 中表示为 DataFrame,除了将它们剥离为 RDD 并像列表一样迭代它们之外,是否还有一种更像 SQL 的方式来实现这一点?

【问题讨论】:

标签: scala apache-spark apache-spark-sql


【解决方案1】:

Spark 的 GraphX 库带有一个连接组件方法:https://spark.apache.org/docs/latest/graphx-programming-guide.html#connected-components

但是我过去曾尝试使用它,发现它有点慢,所以我最终使用此处描述的算法自己实现它:http://mmds-data.org/presentations/2014/vassilvitskii_mmds14.pdf

它非常快,但需要一些实现,可能超出了 stackoverflow 答案的范围(而且我之前编写的代码是专有的)。从那以后的几年里,GraphX 也有可能改进了他们的实施。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2016-07-11
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多