我正在使用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?
Graphframes文档从不承诺连续的ID - 相反它提供的唯一保证是:
生成的DataFrame包含所有顶点信息和一个附加列:
component(LongType):此组件的唯一ID
在实践中,GraphX实现使用组件中的最小ID(“ 返回包含顶点值的图形,其中包含包含该顶点的连接组件中的最低顶点id ”),而Graphframes 似乎也做同样的事情。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。