一种大规模rdf数据关联路径发现方法【
技术领域:
】[0001]本发明涉及一种基于SPARKGRAPHX的大规模RDF数据关联路径发现方法,属于计算机软件
技术领域:
。【
背景技术:
】[0002]语义网是人工智能和Web技术相结合的产物,语义网的内容表达是基于XML(extensibleMarkupLangauge)语言和资源描述框架(RDF)来实现的JML允许使用者以层次结构自定义标记来标注数据,并将其作为标注放置在网页中,以便计算机程序处理网页内容。XML的内容包括XML声明、定义语言语法的DTD(DocumentTypeDeclarat1n)、描述标记的详细说明及文档本身等。RDF是Web上用于数据交换的标准模型,继承了Web的连接结构,使用统一资源标识符(URI)描述网络上的节点以及节点间的联系,即三元组模型。使用这个简单的模型,允许结构化和半结构化的数据在不同的应用程序间共享。[0003]目前广泛用来检索RDF信息以及数据之间的关联路径都是通过拼接有限的SPARQL语句来完成数据关联路径的搜索,但目前的SPARQL只支持RDF数据基本模式的匹配查询,不支持对RDF数据节点间或者单节点周围可能存在的联系路径的查询,不能充分挖掘RDF数据节点间关联的特性,因此很难直接发挥RDF数据模型区别于其它数据模型的优势,而实际应用中不仅需要使用SPARQL对RDF数据进行基本模式匹配的查询,很多时候挖掘RDF数据节点间的联系也十分重要。目前也有一些发明和软件是在做RDF数据关联路径发现,例如RELFINDER可以发现RDF数据之间的关联和关联路径,但是它的运行原理和机制是限制了数据发现的路径长度和数据之间连接的方向,列举了三种场景下给出每一种场景下的SPARQL语句拼接,这种方式在一定程度上确实能够发现RDF数据的关联路径,但是诸多的限制也会造成数据关联路径发现不完全的现象,而且RELFINDER在很大程度上它要求底层必须为RDF数据库且该数据库支持SPARQL标准,对底层数据库的耦合性也较高。另外RELFINDER要求发现关联数据必须在同一台RDF数据库当中,只有这样才能够发现数据之间的关联路径,但是现实情况往往是数据量大且数据节点多,一个RDF数据库无法存储所有的数据,此时RELFINDER就解决不了这样的数据的关联路径发现问题。【
发明内容】[0004]针对现有技术中存在的技术问题,本发明的目的在于提供一种基于SPARKGRAPHX的大规模RDF数据关联路径发现方法,该方法运用了现有的一些大数据处理平台尤其是图形数据并行化处理框架,通过自主研发的一套关联数据处理和分析机制,实现了基于spark的RDF数据关联路径的发现。从总体说来,该发明主要包含RDF关联数据抽取模块、关联数据组织模块、关联数据的存储和管理模块、关联数据构图模块、最大连通子图计算模块、关联数据路径搜索模块、关联数据源的指定和关联路径可视化展示模块。[0005]本发明的技术方案为:[0006]—种基于SPARKGRAPHX的大规模RDF数据关联路径发现方法,其步骤为:[0007]1)RDF关联数据抽取模块:该模块读取关于多个RDF数据库地址信息、用户名、密码、数据库名称的配置信息,启动SPARQL构建语句模块,通过该模块作用是调用系统内置的sparql查询语句,查询关联数据,即主语、谓语、宾语均为url的资源,然后连接RDF数据库,抽取数据库当中的RDF关联数据,并且将多台RDF数据库查询出来的关联数据三元组以〈主语>〈谓语X宾语〉的形式缓存在内存中,超出发明给予的缓存上限1G,启动连接HDFS模块,启动HDFS写入模块将数据写入到HDFS当中,存储的文件名称为rdf_relat1nS.n3由分布式文件系统存储RDF关联数据信息。[0008]2)关联数据组织模块:RDF数据都是URL形式,而GRAPHX接收的数据id为long类型且数据与数据之间的关系都通过这个id进行描述,而RDF数据与数据之间的关系都通过URL描述。因此本发明对RDF的主语和宾语内容进行了重编码。因此本模块的功能是从HDFS当中读取主语和宾语的信息并且给主语和宾语内容重新分配id,首先是通过hive这个数据仓储工具,将之前注入到hdfs文件系统中rdf_relat1ns.n3数据调用系统编制好的hive脚本,读取出来:rdf_relat1ns.n3文件当中的主语url、谓语url和宾语url,然后首先对主语url和宾语url进行编码,分别对主语和宾语的url都分配一个long整型的id号,最终生成主语idl主语url和宾语id2宾语url这样的内容,将这个内容存入到node.txt文件中。然后再生成idlid2谓语url这样的内容,将这个内容存储到edge,txt文件中。根据上述的关联关系模块的功能,发明首先利用了hive的client创建了一个结构为id-url(例如lhttp://baidu.com,2http://google.?0!11.01)1^^_代1&1:;[011811丨口表格结构,这个表格结构存储在了hive的metasore模块当中,然后调用了系统内置的装载数据的脚本,将rdf_relat1ns.η3内容装载到了RDF_relat1nShip表中,首先调用系统内置脚本读取表中的主语内容和宾语内容,然后将这个主语url和宾语url进行编码,在读取这个主语和宾语对应的谓语,最后形成两种结构的内容,一个是id主语url,id宾语url;另一个是主语id宾语id谓语url,再将第一种结构的内容存储到点文档node.txt当中,再将第二种结构的内容存储到edge.txt边文档中。最后再把这两个文档存储到hdfs当中。[0009]3)关联数据的存储和管理模块:该模块的主要功能有两个,一个是建立点表格(nodes)和边表格(edges)且将这个文档结构存储在hivemetastore中,第二个就是调用数据载入脚本将HDFS中的node.txt和edge.txt文档中的内容存储到edges表和nodes表中。那么具体的做法是首先系统启动内置点表格创建脚本createtablenodesvalues(idlong,urlString)和边表格创建脚本createtableedgesvalues(idlong,idlong,urlString)构建边表格和点表格结构,然后调用loaddataintotable这样的批次载入数据的方式将node.txt和edge.txt文档中的内容注入到上述表格中。最后hive会将创建的边表格结构和点表格结构存储到metastore中。接收点文档和边文档,启动HDFS数据写入模块,然后将点文档和边文档存储到HDFS文件系统当中。并且构建hive表结构,并将表结构存储在hive的metadata元信息存储库中。[0010]4)关联数据构图模块:包括了hive查询模块、vertexRDD构建模块、EdgeRDD构建模块、graph构建模块。hive查询模块构建查询语句,将HDFS文件系统中存储的node,txt和edge,txt的内容查询出来。具体的来说,首先我们查询的是nodes表,运用hql基本的语法规则构建了一个点查询语句,selectid,urlfromnodes,我们此时查询后得到的结果为id和url,为下一步利用这个查询出来的结果构建vertexRDD做铺垫,同理我们用类似的语句可以查询出来edge表中的内容,为下一步构建EdgeRDD做铺垫。vertexRDD构建模块负责将点文档内容通过spark接口构建出点弹性分布式数据集实例,具体的做法是首先从nodes表中实际上查询出来的结果是关于id和url的一个集合,那么我们可以创建一个Array,这个Array数组里面存储的是node实例,node实例包含两个属性,这两个属性是整数类型身份号longid和字符串类型统一资源定位符Stringurl(因为此处是从nodes表中读取的内容,因此这里的url指的是主语或者宾语的url而不是谓语的url),最后通过SparkContext序列化接口接收这个包含着点集合的Array数组,这样就创建了一个vertexRDDeEdgeRDD构建模块将边文档内容通过spark接口构建出边弹性分布式数据集实例,它的创建过程与vertexRDD类似,首先是从edge表实际上查询出来的结果是关于ididurl的一个集合,那么我们可以创建一个Array,这个Array数组里面存储的是edge实例,edge实例包含三个属性,这三个属性是longidl,longid2,Stringurl,最后通过SparkContext序列化接口接收这个包含着边集合的Array数组,这样就创建了一个EdgeRDD。最后我们利用了spark接口将上述的两个创建的vertexRDD和EdgeRDD实例注入到spark接口中来实例化一个graph实例,而这个graph实例就是一个分布式图形数据集合。[0011]5)最大连通子图计算模块:计算的目的是弄清一个图有几个连通部分及每个连通部分有多少顶点。这样可以将一个大图分割为多个小图,并去掉零碎的连通部分,从而可以在多个小子图上进行后面的关联当前第1页1 2 3 4 5