0

我正在使用 Spark Graphframes 库来创建身份解析系统。我已经能够使用 spark 来查找匹配项。我的计划是使用图表来查找人与人之间的短暂联系,并为他们分配一个 id 以进行进一步分析等。

我使用了以下数据(来自公共 febrl 数据库):

顶点数据样本:

+----------+--------+-------------+-------------------+--------------------+----------------+--------+-----+-------------+----------+---+-----+
|given_name| surname|street_number|          address_1|           address_2|          suburb|postcode|state|date_of_birth|soc_sec_id| id|block|
+----------+--------+-------------+-------------------+--------------------+----------------+--------+-----+-------------+----------+---+-----+
|  michaela| neumann|            8|     stanley street|               miami|   winston hills|    4223|  nsw|     19151111|   5304218|  0| mneu|
|  courtney| painter|           12|  pinkerton circuit|          bega flats|       richlands|    4560|  vic|     19161214|   4066625|  1| cpai|
|   charles|   green|           38|salkauskas crescent|                kela|           dapto|    4566|  nsw|     19480930|   4365168|  2| cgre|
|   vanessa|    parr|          905|     macquoid place|   broadbridge manor|   south grafton|    2135|   sa|     19951119|   9239102|  3| vpar|
|   mikayla|malloney|           37|      randwick road|             avalind|hoppers crossing|    4552|  vic|     19860208|   7207688|  4| mmal|
|     blake|   howie|            1|     cutlack street|belmont park belt...|        budgewoi|    6017|  vic|     19250301|   5180548|  5| bhow|
| blakeston| broadby|           53|     traeger street|   valley of springs|      north ward|    3083|  qld|     19120907|   4308555|  7| bbro|
|    edward| denholm|           10|        corin place|           gold tyne|       clayfield|    4221|  vic|     19660306|   7119771|  9| eden|
|   charlie|alderson|          266|hawkesbury crescent|deergarden caravn...|           cooma|    4128|  vic|     19440908|   1256748| 10| cald|
|     molly|   roche|           59|willoughby crescent|        donna valley|         carrara|    4825|  nsw|     19200712|   1847058| 11| mroc|
+----------+--------+-------------+-------------------+--------------------+----------------+--------+-----+-------------+----------+---+-----+

边缘数据样本:

+---+-----+-----+
|src|  dst|match|
+---+-----+-----+
|  0|10000|    1|
|  1|17750|    1|
|  1|10001|    1|
|  1| 7750|    1|
|  2|19656|    1|
|  2|10002|    1|
|  2| 9656|    1|
|  3|19119|    1|
|  3|10003|    1|
|  3| 9119|    1|
+---+-----+-----+

创建的图表:

g = GraphFrame(vertix_data, edge_data)

使用的连接组件:

connected = g.connectedComponents(algorithm='graphframes')

这导致:

+----------+--------+-------------+-------------------+--------------------+----------------+--------+-----+-------------+----------+---+-----+---------+
|given_name| surname|street_number|          address_1|           address_2|          suburb|postcode|state|date_of_birth|soc_sec_id| id|block|component|
+----------+--------+-------------+-------------------+--------------------+----------------+--------+-----+-------------+----------+---+-----+---------+
|  michaela| neumann|            8|     stanley street|               miami|   winston hills|    4223|  nsw|     19151111|   5304218|  0| mneu|        0|
|  courtney| painter|           12|  pinkerton circuit|          bega flats|       richlands|    4560|  vic|     19161214|   4066625|  1| cpai|        1|
|   charles|   green|           38|salkauskas crescent|                kela|           dapto|    4566|  nsw|     19480930|   4365168|  2| cgre|        2|
|   vanessa|    parr|          905|     macquoid place|   broadbridge manor|   south grafton|    2135|   sa|     19951119|   9239102|  3| vpar|        3|
|   mikayla|malloney|           37|      randwick road|             avalind|hoppers crossing|    4552|  vic|     19860208|   7207688|  4| mmal|        4|
|     blake|   howie|            1|     cutlack street|belmont park belt...|        budgewoi|    6017|  vic|     19250301|   5180548|  5| bhow|        5|
| blakeston| broadby|           53|     traeger street|   valley of springs|      north ward|    3083|  qld|     19120907|   4308555|  7| bbro|        7|
|    edward| denholm|           10|        corin place|           gold tyne|       clayfield|    4221|  vic|     19660306|   7119771|  9| eden|        9|
|   charlie|alderson|          266|hawkesbury crescent|deergarden caravn...|           cooma|    4128|  vic|     19440908|   1256748| 10| cald|       10|
|     molly|   roche|           59|willoughby crescent|        donna valley|         carrara|    4825|  nsw|     19200712|   1847058| 11| mroc|       11|
+----------+--------+-------------+-------------------+--------------------+----------------+--------+-----+-------------+----------+---+-----+---------+

组件列并不总是以 1 为增量增加,但似乎随机跳过数字,我想确保以 1 为增量增加使用此数字为每个人分配一个 ID。有人知道为什么 Graphframes 会这样做吗?

当我进一步研究这一点时,对于我的开发数据框中的大约 20,000 行,大约 17% 的条目中有一个跳过。在极端情况下,差距可能高达 20-30 左右,即一排 id 是 5846,下一排是 5868。我担心的是,当我以数百万和数亿规模扩展时,id 之间的差距会变得非常大,这可能会产生问题。

TL;DR:为什么 Sparks 连接的组件似乎随机跳过值而不总是递增 1?

4

1 回答 1

0

Graphframes 文档从不承诺连续的 id - 相反,它提供的唯一保证是:

生成的 DataFrame 包含所有顶点信息和一个附加列:

组件 (LongType):此组件的唯一 ID

在实践中,GraphX 实现使用组件中的最小 ID(返回一个图,其顶点值包含包含该顶点的连接组件中的最低顶点 id),而 Graphframes似乎也在做同样的事情

于 2018-12-17T15:59:22.577 回答