[发明专利]一种Spark并发子图查询的方法在审
申请号: | 201711346701.0 | 申请日: | 2017-12-15 |
公开(公告)号: | CN108090179A | 公开(公告)日: | 2018-05-29 |
发明(设计)人: | 王明兴 | 申请(专利权)人: | 北京海致星图科技有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100083 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 查询计划 子图查询 查询 并发 匹配点集 匹配结果 匹配 大规模数据 数据预处理 并行处理 匹配算法 数据图 取下 输出 合并 | ||
本发明公开了一种Spark并发子图查询的方法,包括生成查询图的查询计划、数据图数据预处理、从查询计划中取第一个查询子图,计算匹配实例和匹配点集、依次从查询计划中取下一个查询子图,计算该查询子图的匹配实例和匹配点集,将其与之前的匹配结果合并、查询计划执行完成后输出最终的匹配结果。本发明提供一种Spark并发子图查询的方法,通过当前的子图匹配算法,适用于Spark平台,效率比较高,能使用多台机器并行处理,能力较强,容易处理大规模数据。
技术领域
本发明涉及查询方法技术领域,尤其涉及一种Spark并发子图查询的方法。
背景技术
知识图谱与图数据挖掘中经常需要挖掘满足给定结构的所有子图,这个问题通常称之为子图同构、子图匹配或子图查询。当前的子图匹配算法多是基于单机的,效率比较低,不能使用多台机器并行处理,能力有限,难以处理大规模数据。
发明内容
本发明的目的就在于为了解决上述问题而提供一种Spark并发子图查询的方法。
本发明通过以下技术方案来实现上述目的:
本发明包括以下步骤:
S1:生成查询图的查询计划,将其拆分成多个查询子图,每个查询子图包含1条或多条边,所有的边包含一个公共的顶点;
S2:数据图数据预处理,原始数据图给出了每个顶点和边的属性值,查询子图中给出了顶点和边的匹配函数,预处理过程中先判断数据图中每个顶点与查询子图中哪些顶点匹配,数据图中的每条边与查询子图中哪些边匹配;
S3:从查询计划中取第一个查询子图,计算匹配实例和匹配点集;
S4:依次从查询计划中取下一个查询子图,计算该查询子图的匹配实例和匹配点集,将其与之前的匹配结果合并;
S5:查询计划执行完成后输出最终的匹配结果。
本发明优选地,根据步骤S1,所述查询图拆分包括以下步骤:
A1:取度数最大的顶点作为查询子图的根节点,所有与根节点相连的边与点构成一个新的查询子图,度数最大的顶点存在多个时可随机选一个;
A2:从查询图删除相应的边,边删除后如果存在孤立的顶点也删除,按步骤A1的方式生成新的查询子图;
A3:如果此查询子图与之前生成的查询子图的顶点有交集,则此查询子图是合法的,否则排除此查询子图的根节点,按步骤A1的方式生成新的查询子图,直到生成满足条件的查询子图;
A4:当所有边都属于某个查询子图时终止。
本发明优选地,所述度数为连接的边的数量。
本发明优选地,根据步骤S2,
所述顶点匹配判定用一个BitSet来记录数据图中的顶点匹配哪些查询图中的顶点,假设查询图中顶点的数量为numQv,spark并行匹配方法为:
val graphVertexMatch = dataGraph.mapVertices((_, vd) => { val bitSet =new BitSet(numQv) checkVertexMatch(bitSet) bitSet})
图graphVertexMatch中每个顶点的属性记录该顶点与查询图中的哪些顶点匹配;
所述边匹配判定,一条边匹配查询图中的边需同时满足边的属性匹配以及两端顶点属性匹配,得到顶点属性匹配结果后,判定数据图中的每条边与查询图中的哪些边匹配,假设查询图中边的数量为numQe ,spark并行匹配方法为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京海致星图科技有限公司,未经北京海致星图科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711346701.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种文本数据分析方法、装置、服务器和存储介质
- 下一篇:图书馆管理系统