Graphframes / Graphx подключенные компоненты пропускают номера - PullRequest
0 голосов
/ 17 декабря 2018

Я использую библиотеку Spark Graphframes для создания системы распознавания личности.Я смог использовать искру, чтобы найти совпадения.Мой план состоял в том, чтобы использовать график, чтобы найти временные связи между людьми и назначить им один идентификатор для дальнейшего анализа и т. Д.

Я использовал следующие данные (из общедоступной базы данных 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, но, кажется, случайно пропускает числа, я хотел бы убедиться, что увеличение приращений на единицу при использовании этого числаназначить каждому человеку свой идентификатор.Кто-нибудь знает, почему Graphframes делает это?

Когда я углубляюсь в это, для примерно 20 000 строк в моем фрейме данных разработки около 17% записей пропускают их.В экстремальных случаях разрыв может составлять примерно 20-30, то есть идентификатор одной строки равен 5846, а следующий - 5868. Меня беспокоит то, что когда я масштабируюсь в миллионы и сотни миллионов, разрывы между идентификаторами будут очень большими.может создать проблемы в будущем.

TL; DR: Почему компоненты, подключенные к Sparks, случайно пропускают значения и не всегда увеличивают на 1?

1 Ответ

0 голосов
/ 17 декабря 2018

Документация Graphframes никогда не обещает последовательные идентификаторы - вместо этого единственная гарантия, которую она предоставляет:

Результирующий DataFrame содержит всю информацию о вершинах и один дополнительный столбец:

компонент (LongType): уникальный идентификатор для этого компонента

На практике реализация GraphX ​​использует наименьший идентификатор в компоненте ( " возвращает график со значением вершины, содержащим самый низкий идентификатор вершины в подключенном компонентесодержащий эту вершину"), и графические рамки , кажется, делают то же самое .

...