/data-analysis-of-books-and-papers

A data analysis project of books and papers by spark.

Primary LanguageScala

data-analysis-of-books-and-papers

通过书籍的“作者、标题、中图分类”与论文的“作者、关键词、领域”进行分步关联处理,最后将节点(图书或论文)保存成文本文件,导入图数据库中。

一、源文件

由图书(来源是图书馆)、论文(来源是万方和知网)的数据库表导出成的文本文件。

1.图书数据文件:

图书ID与作者关联文件(book_id_author.txt)

8473#王珏, 周志华, 周傲英
539627#周志华,杨强

图书ID与中图法分类号关联文件(book_id_CLCId.txt)

8473,TP181
539627,TP181

中图法分类号与中图法分类名关联文件(cls_no_name.txt)

TP181,自动推理、机器学习
G252.7,文献检索

2.论文数据文件:

论文ID与论文系统唯一标识关联文件(paper_id_paperId.txt)

48368,10284-1016003545.nh
269170,JSGG200101018

论文系统唯一标识与论文作者关联文件(paper_paperId_author.txt)

10284-1016003545.nh,周志华
JSGG200101018,周志华

论文系统唯一标识与论文领域名称关联文件(paper_paperId_field.txt)

10284-1016003545.nh,自动化技术
JSGG200101018,自动化技术

论文系统唯一标识与论文关键词关联文件(paper_paperId_indexTerm.txt)

10284-1016003545.nh,机器学习
10284-1016003545.nh,凸松弛

二、思路

分为四个步骤,最终得到节点权重和关联信息的文本文件,导入图数据库中使用。

1.第一步骤

目的:

获得7个图的顶点的二进制文件与边的文本文件。

实现:

在类edu.libsys.stats.GetEdgeAndVertices中完成;在更新权重后,此步骤不需要重新执行。

1)根据“图书、论文源数据”,建立ID(图书、论文)与属性(作者、中图法分类号、中图法分类名、领域名称、关键词)的RDD(Spark中的概念,分布式弹性数据集)

2)不同RDD之间进行Join计算,获得根据某一属性相同的ID与ID的RDD;

3)建立7个图,获得7个图的顶点的二进制文件与边的文本文件。

2.第二步骤

目的:

根据边文件导出图书、论文关联CSV文件,便于导入图数据库Neo4j中;在更新权重后,此步骤不需要重新执行。

实现:

在类edu.libsys.stats.GetRelationship中完成

1)读取边的文本文件,使用方法对每行文本做处理;

2)7个RDD,保存成三个文件(Spark保存成文件会分块保存在同一目录下),即图书与图书(bookBookRelationships)、论文与论文(paperPaperRelationships)、图书与论文(bookPaperRelationships)。

3.第三步骤

目的:

根据“节点、边文件”计算出“每个节点的入度”,并保存为文本文件;在更新权重后,此步骤不需要重新执行。

实现:

在类edu.libsys.stats.GetInDegrees中完成

1)读取顶点的二进制文件与边的文本文件,生成7个图;

2)根据7个图的入度RDD与节点RDD做fullOuterJoin计算,得到每个节点的入度,保存成7个文本文件。

4.第四步骤

目的:

根据“入度文件”和“edu.libsys.conf.Conf类中配置的权重”,计算“每个节点的三种权重”,保存成文本文件;在更新权重后,此步骤需要重新执行。

实现:

在类edu.libsys.Main中完成

1)读取7个入度文件,将每个节点的入度与相应权重(3套权证)相乘,得到21个RDD;

2)分权重类型整合成3个权重RDD;

3)将3个权重RDD根据ID整合到一个权重RDD;

4)分为图书、论文保存;