基于Spark的大规模数据全局去重方法、电子设备及介质与流程
未命名
08-12
阅读:72
评论:0
基于spark的大规模数据全局去重方法、电子设备及介质
技术领域
1.本发明涉及数据处理技术领域,特别涉及一种基于spark的大规模数据全局去重方法、电子设备、存储介质
背景技术:
2.大规模训练模型时需要大量语料数据作文训练样本,而这些训练样本往往通过爬取各种数据源获取,而在互联网上,不同数据源或者同一数据源的不同分区中往往存在大量实际内容相似,仅在表达方式存在区别的重复语料,而由于这些语料数据实际并不完全重复,通过传统的去重方法难以直接判断这些语料数据彼此之间是否在表达相同内容,在对模型进行训练时,如果不能将这部分语料数据去除,则容易导致模型对这些重复语料过度学习,导致模型的训练效果不佳,而对于大模型而言,训练其所需要的语料数据的规模更是十分庞大,通过传统的单机方式对大规模语料数据进行去重往往效率很低,如何高效地对大规模的相似语料数据进行去重是目前亟需解决的问题。
技术实现要素:
3.本技术实施例的主要目的在于提出一种基于spark的大规模数据全局去重方法、电子设备和计算机可读存储介质,在分组、分区和全局三种不同粒度上对语料数据进行归并去重,实现对大规模语料数据的高效率模糊去重。
4.本技术实施例的第一方面实施例提出一种基于spark的大规模数据全局去重方法,包括:
5.对大规模数据进行预处理,得到多个第一处理文档,并将所述第一处理文档分别存储至多个存储分区中;
6.在各个存储分区中对所述第一处理文档进行分组,得到多个文档分组;
7.在各个所述文档分组内对所述第一处理文档进行相似检测,得到多个相似对;
8.根据所述第一处理文档的预配置的全局编号确定每个所述相似对的最小归并相似对,并将指向同一所述最小归并相似对的所有相似对合并,得到分组相似集;
9.根据所述第一处理文档的全局编号确定每个所述分组相似集的最小归并分组集,并将指向同一所述最小归并分组集的所有分组相似集合并,得到分区相似集;
10.根据所述第一处理文档的全局编号确定每个所述分区相似集的最小归并分区集,并将指向同一所述最小归并分区集的所有分区相似集合并,得到全局相似集,并通过第二处理文档记录每个所述全局相似集中的所有所述第一处理文档的所述全局编号;
11.从所述第二处理文档中去除每个所述全局相似集中的第一个所述全局编号,并将所有所述全局相似集中的余下的所有所述全局编号汇总,得到待消除文档编号集,将所述待消除文档编号集广播至各个所述存储分区中;
12.在各个所述存储分区中,根据所述待消除文档编号集对所述第一处理文档进行过滤操作。
13.在一些实施例中,所述根据所述第一处理文档的预配置的全局编号确定每个所述相似对的最小归并相似对,并将指向同一所述最小归并相似对的所有相似对合并,得到分组相似集,包括:
14.对所述相似对进行编号,并根据所述第一处理文档的全局编号和所述相似对的编号构建第一哈希表,其中,所述第一哈希表的键值是所述第一处理文档的全局编号,所述第一哈希表的真值是包括对应于键值的所述第一处理文档的所有相似对的编号构成的有序链表;
15.构建第一动态数组并根据所述第一哈希表对所述第一动态数组赋值,根据赋值结果确定每个所述相似对归并的最小相似对,将同一所述文档分组内指向同一所述最小相似对的多个相似对合并,得到分组相似集。
16.在一些实施例中,所述根据所述第一处理文档的全局编号确定每个所述分组相似集的最小归并分组集,并将指向同一所述最小归并分组集的所有分组相似集合并,得到分区相似集,包括:
17.对所述分组相似集进行编号,根据所述全局编号和所述分组相似集的编号构建第二哈希表,其中,所述第二哈希表的键值是所述第一处理文档的全局编号,所述第二哈希表的真值是包括对应于键值的所述第一处理文档的所有分组相似集的编号构成的有序链表;
18.构建第二动态数组并根据所述第二哈希表对所述第二动态数组赋值,根据赋值结果确定每个所述分组相似集归并的最小相似集,将同一所述存储分区内指向同一所述最小相似集的多个分组相似集合并,得到分区相似集。
19.在一些实施例中,所述根据所述第一处理文档的全局编号确定每个所述分区相似集的最小归并分区集,并将指向同一所述最小归并分区集的所有相似对合并,得到全局相似集,并通过第二处理文档记录每个所述全局相似集包括所有所述第一处理文档的所述全局编号,包括:
20.对所述分区相似集进行编号,并根据所述全局编号和所述分区相似集的编号构建第三哈希表,其中,所述第三哈希表的键值是所述第一处理文档的全局编号,所述第三哈希表的真值是包括对应于键值的所述第一处理文档的所有分区相似集的编号构成的有序链表;
21.构建第三动态数组并根据所述第三哈希表对所述第三动态数组赋值,根据赋值结果确定每个所述分区相似集归并的最小全局集,将指向同一所述最小全局集的多个分区相似集合并,得到全局相似集,通过第二处理文档记录各个所述全局相似集中的所有所述第一处理文档的全局编号。
22.在一些实施例中,所述构建第一动态数组并根据所述第一哈希表对所述第一动态数组赋值,根据赋值结果确定每个所述相似对归并的最小相似对,将同一所述文档分组内指向同一所述最小相似对的多个相似对合并,得到分组相似集,包括:
23.构建并初始化所述第一动态数组;
24.扫描所述第一哈希表以对所述第一动态数组赋值,赋值后的所述第一动态数组的每一项的索引值是所述相似对的编号,每一项存储的初值是所述第一哈希表的真值中位于所述索引值的后一项的相似对的编号;
25.对所述第一动态数组的第i项,获取第i项的第一存放值,在所述第一存放值为第
一预设值的情况下,令所述第一存放值为i,其中,i是正整数;
26.在所述第一存放值不为所述第一预设值的情况下,获取所述第一动态数组中以所述第一存放值作为索引值的项的第二存放值,在所述第二存放值不为所述第一预设值的情况下,将所述第二存放值作为新的所述第一存放值,并以所述新的第一存放值作为索引值获取新的所述第二存放值,直至所述第二存放值为所述第一预设值;
27.在所述第二存放值是所述第一预设值的情况下,确定所述第一存放值是相似对编号为i的相似对归并的最小相似对的编号;
28.根据所述第一动态数组中存放值相同的所有项的索引值在各个所述文档分组中将对应的多个相似对合并,得到所述分组相似集。
29.在一些实施例中,所述构建第二动态数组并根据所述第二哈希表对所述第二动态数组赋值,根据赋值结果确定每个所述分组相似集归并的最小相似集,将同一所述存储分区内指向同一所述最小相似集的多个分组相似集合并,得到分区相似集,包括:
30.构建并初始化所述第二动态数组;
31.扫描所述第二哈希表以对所述第二动态数组赋值,赋值后的所述第二动态数组的每一项的索引值是所述分组相似集的编号,每一项存储的初值是所述第二哈希表的真值中位于所述索引值的后一项的分组相似集的编号;
32.对所述第二动态数组的第j项,获取第j项的第三存放值,在所述第三存放值为第二预设值的情况下,令所述第三存放值为j,其中,j为正整数;
33.在所述第三存放值不为第二预设值的情况下,获取所述第二动态数组中以所述第三存放值作为索引值的项的第四存放值,在所述第四存放值不为所述第二预设值的情况下,将所述第四存放值作为新的所述第三存放值,并以所述新的第三存放值作为索引值获取新的所述第四存放值,直至所述第四存放值为所述第二预设值;
34.在所述第四存放值是所述第二预设值的情况下,确定所述第三存放值是分组相似集编号为i的分组相似集归并的最小相似集的编号;
35.根据所述第二动态数组中存放值相同的所有项的索引值将对应的多个所述分组相似集合并,得到所述分区相似集。
36.在一些实施例中,所述构建第三动态数组并根据所述第三哈希表对所述第三动态数组赋值,根据赋值结果确定每个所述分区相似集归并的最小全局集,将指向同一所述最小全局集的多个分区相似集合并,得到全局相似集,通过第二处理文档记录各个所述全局相似集中所包括的所有所述第一处理文档的全局编号,包括:
37.构建并初始化所述第三动态数组;
38.扫描所述第三哈希表以对所述第三动态数组赋值,赋值后的所述第三动态数组的每一项的索引值是所述分区相似集的编号,每一项存储的初值是所述第三哈希表的真值中位于所述索引值的后一项的分区相似集的编号;
39.对所述第三动态数组的第k项,获取第k项的第五存放值,在所述第五存放值为第三预设值的情况下,令所述第五存放值为k,其中,k是正整数;
40.在所述第五存放值不为所述第三预设值的情况下,获取所述第三动态数组中以所述第五存放值作为索引值的项的第六存放值,在所述第六存放值不为所述第三预设值的情况下,将所述第六存放值作为新的所述第五存放值,并以所述新的第五存放值作为索引值
获取新的所述第六存放值,直至所述第六存放值为所述第三预设值;
41.在所述第六存放值为所述第三预设值的情况下,确定所述第五存放值是分区相似集编号为j的分区相似集归并的全局相似集的编号;
42.根据所述第三动态数组中存放值相同的所有项的索引值将对应的所述分区相似集合并,得到所述全局相似集;
43.通过第二处理文档记录每个所述全局相似集中所包括的第一处理文档的全局编号。
44.在一些实施例中,所述对大规模数据进行预处理,得到多个第一处理文档,并将所述第一处理文档分别存储至多个存储分区中,包括:
45.从所述大规模数据提取多个原始输入文档,并对所述原始输入文档进行编号,得到每个所述原始输入文档的全局编号;
46.对所有所述原始输入文档进行分词处理,将所述原始输入文档转化为包括多个单词的单词集合;
47.计算每个单词的哈希编码;
48.根据所述哈希编码、所述全局编号生成与每个所述原始输入文档对应的所述第一处理文档并将所有所述第一处理文档存储至各个存储分区中。
49.在一些实施例中,所述在各个存储分区中对所述第一处理文档进行分组,得到多个文档分组,包括:
50.计算所述第一处理文档中的每个单词的词频,并根据所述词频对每个所述第一处理文档中的单词进行排序,对排序后的所述第一处理文档进行前缀剪枝处理,得到每个所述第一处理文档的前缀数组;
51.在每个所述存储分区中,将前缀数组中包括至少一个相同单词的所述第一处理文档划入同一分组,得到多个所述文档分组。
52.在一些实施例中,所述在各个所述文档分组内对所述第一处理文档进行相似检测,得到多个相似对,包括:
53.通过预设算法计算每个所述第一处理文档的文档指纹;
54.根据所述文档指纹确定每个所述文档分组内的所述第一处理文档之间的海明距离;
55.将所述海明距离小于第四预设值的所述第一处理文档划为相似对。
56.本技术实施例的第二方面提出一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如第一方面实施例中任意一项所述的基于spark的大规模数据全局去重方法。
57.本技术实施例的第三方面提出一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器运行,以实现如第一方面实施例中任一项所述的基于spark的大规模数据全局去重方法。
58.本技术实施例提出一种基于spark的大规模数据全局去重方法、电子设备和存储介质,通过将大规模的语料数据存储至不同的存储分区中,在各个存储分区中再对语料数据进行分组以剔除大量毫不相关的语料数据,再在各个文档分组内对第一处理文档进行相似检测,确定同一分组内的各个文档之间是否相似,再依次在文档分组、存储分区、以及系
统全局三种不同粒度上对相似对进行合并,由此在文档分组和存储分区两个粒度上采取分布式并行处理的方法对相似的语料数据进行两次初步归并,再将初步合并后的语料数据汇总至系统全局进行归并,由此在对大规模数据进行去重时可以节省大量时间,实现对大规模语料的高效率模糊去重。
59.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
60.图1是本实施例提供的一种基于spark的大规模数据全局去重方法的流程图;
61.图2是图1中步骤s400的流程图;
62.图3是图2中步骤s220的流程图;
63.图4是图1中步骤s500的流程图;
64.图5是图4中步骤s520的流程图;
65.图6是图4中步骤s600的流程图;
66.图7是图6中步骤s620的流程图;
67.图8是本实施例提供的一种电子设备的结构示意图;
68.附图用来提供对本技术技术方案的进一步理解,并且构成说明书的一部分,与本技术的实施例一起用于解释本技术的技术方案,并不构成对本技术技术方案的限制。
具体实施方式
69.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限定本技术。
70.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
71.此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。
72.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序运行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际运行的顺序有可能根据实际情况改变。
73.参照图1,本技术实施例的第一方面提出一种基于spark的大规模数据全局去重方法,包括步骤s100至步骤s800:
74.步骤s100,对大规模数据进行预处理,得到多个第一处理文档,并将第一处理文档分别存储至多个存储分区中;
75.在一些实施例中,大规模数据可以是从各个网页等数据源上爬取的大量文本数据,这些文本数据构成多个文档,对大规模数据进行预处理的步骤可以包括:从大规模数据中提取多个原始输入文档,在一些实施例中,语料数据规模庞大,可以达到数十tb,无法直接存放至内存,需要通过外部存储进行储存,再从外部存储中读取语料数据,通过弹性分布式数据集rdd记录每个原始输入文档,再对所有原始输入文档进行编号,得到每个原始输入文档在系统全局的编号,具体的,可以通过对原始输入文档执行zipwithindex操作得到每个原始输入文档的全局编号,并通过memoryanddisk操作将编号后的每个原始输入文档存储至各个存储分区中;在一些实施例中,对大规模数据预处理的步骤还包括对每个原始输入文档进行分词处理,具体可以通过map算子执行转换操作,采用分词工具将原始输入文档分割成多个单词构成的集合,在一些实施例中,在同一原始输入文档中重复出现的单词仅记录一次,避免在同一文档中重复记录同一单词造成数据冗余,从而提高去重效率;在一些实施例中,对大规模数据进行预处理的步骤还包括计算每个单词的哈希编码,具体的,可以通过murmur哈希算法将每个单词从字符串类型转换为64bit的哈希值,从而得到每个单词的哈希编码,
76.步骤s200,在各个存储分区中对第一处理文档进行分组,得到多个文档分组;
77.在一些实施例中,步骤s200包括:计算第一处理文档中的每个单词的词频,并根据词频对每个第一处理文档中的单词进行排序,对排序后的第一处理文档进行前缀剪枝处理,得到每个第一处理文档的前缀数组;在每个存储分区中,将前缀数组中包括至少一个相同单词的第一处理文档划入同一分组,得到多个文档分组。在本实施例中,首先通过flatmap算子将同一存储分区中的所有第一处理文档展开,并初始化每个单词的词频为1,此时可以通过第一词表记录每个单词的哈希编码以及对应的词频,再将哈希编码相同的单词进行合并,根据合并的次数计算每个单词的词频,由此得到每个存储分区中的单词词频,再将各个存储分区的第一词表汇聚形成第二词表,对第二词表中哈希编码相同的单词对应的词频累加,即可得到每个单词系统全局的词频,具体的,可以通过对第一词表执行reducebykey操作合并哈希编码相同的单词并累计词频,再通过collectasmap操作将第一词表汇聚形成第二词表,可以理解的是,由于重复出现的单词再每个第一处理文档中仅会记录一次,仅当某单词同时出现在不同的第一处理文档中才会在词表中被重复记录并进行后续合并,基于此,词频可以表征某一单词同时出现在多少个第一处理文档中。在一些实施例中,还可以将第二词表广播至各个存储分区中,以方便后续在各个存储分区中对第一处理文档中的单词进行排序。
78.在一些实施例中步骤s200还包括根据词频对第一处理文档中的单词进行排序,具体的,将文档中的单词根据词频从小到大进行排序,再通过预设前缀长度公式计算每个第一处理文档的前缀长度,从排序处理后的第一处理文档中截取前缀数组,再将前缀数组中包括至少一个哈希编码相同的单词的第一处理文档归为同一组,具体的,可以遍历前缀数组中的每个单词,并按照(哈希编码,指纹)的方式进行flatmap操作展开,形成第三处理文档,再对第三处理文档执行groupbykey操作实现文档分组,将由此排除了大量毫不相关的文档,有效降低后续进行相似检测时的计算量。具体的,前缀长度可以通过预设前缀长度公式进行计算,预设前缀长度公式为如下:
[0079][0080]
其中x表示所述全局编号,j表示所述前缀长度,σ
x
表示所述第三处理文档中所有单词的idf权重之和,i取值范围是[1,j]之间的整数,x[i]表示所述第三处理文档中的第i个单词,weight(x[i])表示所述第三处理文档中第i个单词的idf权重,t表示预设相似度阈值;其中,idf权重根据每个单词的词频和第一处理文档的确定,具体的,参照如下公式:
[0081][0082]
其中,idfi表示第i个单词的idf权重,|d|表示第一处理文档的总量,|{j:t∈dj}|表示第i个单词的词频。
[0083]
可以理解的是,若同一单词同时出现在大量文档中,则说明该单词是较为通用的词汇,比如“的”“第一”这类通用词汇,该类单词实际上与文档内容相关程度较低,难以反映文档内容的特征,而当某一单词词频较低,仅出现在少量文档中,这说明该单词和某一领域的内容高度相关,比如“混凝土”“砼”等词汇一般仅出现在建筑领域的文档内,该类词汇与文档内容相关程度较高,可以较好地反应文档内容的特征,基于此,在本实施例中,对第一处理文档中的单词进行倒排序后再进行前缀剪枝,从而将大量通用词汇丢弃,仅保留与文档内容相关程度较高的专业词汇,再将前缀剪枝后仍包括同一哈希编码的第一处理文档划为同一同一文档分组,通过对第一处理文档进行分组,从而过滤大量毫不相关的文档,有效降低后续进行相似检测的计算量。
[0084]
步骤s300,在各个文档分组内对第一处理文档进行相似检测,得到多个相似对;
[0085]
在一些实施例中,可以通过预设算法计算每个第一处理文档的文档指纹,在本实施例中,通过simhash算法计算每个第一处理文档的文档指纹;之后再在每个文档分组内,对每个第一处理文档进行相似度校验,具体的,即计算每个第一处理文档之间的海明距离,将海明距离小于第四预设值的第一处理文档划为相似对。具体的,可以通过对分组处理后第三处理文档进行执行map操作,在每个分组中根据指纹采用海明距离进行相似度验证,在本实施例中,第四预设值可以取3,由此,即实现对第一处理文档的相似检测,此时可以用第四处理文档记录每个分组内的相似对以及各个相似对所包括的第一处理文档的编号。
[0086]
可以理解的是,在一些实施例中,通过预设算法计算每个第一处理文档的文档指纹的步骤可以预先执行,比如,在对第一处理文档进行分词处理并计算每个单词的词频后便计算每个第一处理文档的文档指纹,并将每个第一处理文档的文档指纹也记录在第一处理文档中。或通过第五处理文档记录每个第一处理文档的全局编号及指纹,由此在后续进行海明校验划分相似对时,可以直接从第五处理文档中读取每个全局编号和文档指纹,而无需多次读取并写入对应的第一处理文档进行后续步骤,从而节省通信时间以及减少读写内存导致的时间浪费。
[0087]
步骤s400,根据第一处理文档的预配置的全局编号确定每个相似对的最小归并相似对,并将指向同一最小归并相似对的所有相似对合并,得到分组相似集;
[0088]
在本实施例中,在各个文档分组内部,将包括同一第一处理文档的所有相似对视为可以相互归并的相似对,并将其进行合并,具体的,参照图2,步骤s400包括但不限于如下步骤s210至步骤s220,:
[0089]
步骤s210,对相似对进行编号,并根据第一处理文档的全局编号和相似对的编号构建第一哈希表,其中,第一哈希表的键值是第一处理文档的全局编号,第一哈希表的真值是包括对应于键值的第一处理文档的所有相似对的编号构成的有序链表;
[0090]
可以理解的是,对同一文档分组内的相似对从1开始编号,再以第一处理文档的全局编号作为第一哈希表的键值,再将包括第一处理文档的所有相似对的编号构成有序链表,以该有序链表作为与该键值对应的真值,比如,编号为1、3、7、10的相似对均包括全局编号为1的第一处理文档,则在第一哈希表中,键值为1的项存放的真值即是10、7、3、1构成的有序链表。
[0091]
步骤s220,构建第一动态数组并根据第一哈希表对第一动态数组赋值,根据赋值结果确定每个相似对归并的最小相似对,将同一文档分组内指向同一最小相似对的多个相似对合并,得到分组相似集。
[0092]
根据赋值后的第一动态数组确定每个相似对可以归并的最小归并相似对,如在上述实施例中,编号为10、7、3的相似对均可归并至编号为1的相似对,从而得到分组相似集。
[0093]
参照图3,在一些实施例中,步骤s220可以包括但不限于步骤s310至步骤s360:
[0094]
步骤s310,构建并初始化第一动态数组;
[0095]
可以理解的是,初始化第一动态数组中的每一项的初始存放值均是0
[0096]
步骤s320,扫描第一哈希表以对第一动态数组赋值,赋值后的第一动态数组的每一项的索引值是相似对的编号,每一项存储的初值是第一哈希表的真值中位于索引值的后一项的相似对的编号;
[0097]
在本实施例中,通过扫描哈希表的真值,实现对第一动态数组的赋值,具体的,哈希表的真值是包括同一第一处理文档的多个相似对的编号构成的有序链表,该链表可以是倒排列表,将有序链表中依次相邻的两个值作为第一动态数组的索引值和存放值以对第一动态数组赋值。
[0098]
步骤s330,对第一动态数组的第i项,获取第i项的第一存放值,在第一存放值为第一预设值的情况下,令第一存放值为i,其中,i是正整数;
[0099]
在本实施例中,在扫描第一哈希表对第一动态数组赋值前,第一动态数组的每一项初始存放值均是0,基于此,第一预设值取0,对第一动态数组的第i项,获取其存放值b[i],若b[i]为0,则说明在哈希表的value中,i是有序链表最右端的节点,与编号i的相似对包含同一第一处理文档的所有相似对中,i是最小编号,因此,可以将编号i的相似对视为其本身可归并的最小相似对,故令b[i]=i。
[0100]
步骤s340,在第一存放值不为第一预设值的情况下,获取第一动态数组中以第一存放值作为索引值的项的第二存放值,在第二存放值不为第一预设值的情况下,将第二存放值作为新的第一存放值,并以新的第一存放值作为索引值获取新的第二存放值,直至第二存放值为第一预设值;
[0101]
步骤s350,在第二存放值是第一预设值的情况下,确定第一存放值是相似对编号为i的相似对归并的最小相似对的编号;
[0102]
在一些实施例中,若b[i]不为0,则说明在对应的有序链表中,i的右节点存放有比i更小的值,i并不是该相似对可以归并的最小相似对的编号,此时将b[i]存放的值作为新的索引值,寻找b[b[i]],并令b[i]=b[b[i]],直至b[b[i]]=0,则说明此时b[i]的存放值
是相似对i可以归并的最小相似对编号。
[0103]
步骤s360,根据第一动态数组中存放值相同的所有项的索引值在各个文档分组中将对应的多个相似对合并,得到分组相似集。
[0104]
通过上述步骤,找到每个相似对可以归并的最小相似对之后,遍历第一动态数组,将存放值相同,即可以归并至同一最小相似对的所有相似对合并起来,即可得到多个分组相似集,可以理解的是,由于每个相似对在文档分组中可以归并的最小相似对是唯一的,因此,在同一文档分组内得到的多个分组相似集之间没有交集。基于此,在实现在各个文档分组内,初步将相似对合并,此时,可以通过第六处理文档记录每个分组相似集中的所有第一处理文档的编号,以方便后续在各个存储分区的粒度上对分组相似集合并;此外,步骤s310至步骤s360可以是在各个文档分组间分布式并行运行的,所需花费的总时间和数据量最大的文档分组执行上述步骤所花费时间相同,而由于在对文档进行分组时,仅会将前缀数组中包括相同单词的文档划进同一文档分组,每个文档分组中的数据量相较于该存储分区中存储的文档总量大大缩减,由此,执行上述归并步骤所需的时间也大大减少,归并效率得到明显提升。
[0105]
步骤s500,根据第一处理文档的全局编号确定每个分组相似集的最小归并分组集,并将指向同一最小归并分组集的所有分组相似集合并,得到分区相似集;
[0106]
在本实施例中,对每个文档分组内的相似对进行合并后,需将不同文档分组中的分组相似集进行进一步合并,可以理解的是,由于在对各个存储分区内的第一处理文档进行分组时,是将至少包括同一单词的第一处理文档划进同一文档分组的,而由于每个第一处理文档之间会存在多个单词,在分组时,同一个第一处理文档也会被划进多个文档分组中,基于此,在本实施例中,还可以在存储分区的层面,将包括同一第一处理文档的多个分组相似集进行合并。具体的,在本实施例中,步骤s500包括但不限于步骤s410至步骤s420:
[0107]
步骤s410,对分组相似集进行编号,根据全局编号和分组相似集的编号构建第二哈希表,其中,第二哈希表的键值是第一处理文档的全局编号,第二哈希表的真值是包括对应于键值的第一处理文档的所有分组相似集的编号构成的有序链表;
[0108]
在一些实施例中,通过对第六处理文档执行mappart it ion操作可以将存储分区内所有文档分组汇聚在一起进行操作,从而对同一存储分区内的分组相似集从1开始编号,再以第一处理文档的全局编号作为第二希表的键值,再将包括第一处理文档的所有分组相似集的编号构成有序链表,以该有序链表作为与该键值对应的真值,比如,编号为1、3、7、10的分组相似集均包括全局编号为1的第一处理文档,则在第二哈希表中,键值为1的项存放的真值即是10、7、3、1构成的有序链表。
[0109]
步骤s420,构建第二动态数组并根据第二哈希表对第二动态数组赋值,根据赋值结果确定每个分组相似集归并的最小相似集,将同一存储分区内指向同一最小相似集的多个分组相似集合并,得到分区相似集。
[0110]
参照图5,在一些实施例中,步骤s420包括但不限于如下步骤s510至步骤s560
[0111]
步骤s510,构建并初始化第二动态数组;
[0112]
可以理解的是,初始化第二动态数组中的每一项的初始存放值均是0
[0113]
步骤s520,扫描第二哈希表以对第二动态数组赋值,赋值后的第二动态数组的每一项的索引值是分组相似集的编号,每一项存储的初值是第二哈希表的真值中位于索引值
的后一项的分组相似集的编号;
[0114]
在本实施例中,通过扫描哈希表的真值,实现对第二动态数组的赋值,具体的,哈希表的真值是包括同一第一处理文档的多个分组相似集的编号构成的有序链表,该链表可以是倒排列表,将有序链表中依次相邻的两个值作为第二动态数组的索引值和存放值以对第二动态数组赋值。
[0115]
步骤s530,对第二动态数组的第j项,获取第j项的第三存放值,在第三存放值为第二预设值的情况下,令第三存放值为j,其中,j是正整数;
[0116]
在本实施例中,在扫描第二哈希表对第二动态数组赋值前,第二动态数组的每一项初始存放值均是0,基于此,第二预设值取0,对第二动态数组的第j项,获取其存放值b[j],若b[j]为0,则说明在哈希表的value中,j是有序链表最右端的节点,与编号j的分组相似集包含同一第一处理文档的所有分组相似集中,j是最小编号,因此,可以将编号j的分组相似集视为其本身可归并的最小归并分组集,故令b[j]=j。
[0117]
步骤s540,在第三存放值不为第二预设值的情况下,获取第二动态数组中以第三存放值作为索引值的项的第四存放值,在第四存放值不为第二预设值的情况下,将第四存放值作为新的第三存放值,并以新的第三存放值作为索引值获取新的第四存放值,直至第四存放值为第二预设值;
[0118]
步骤s550,在第四存放值是第二预设值的情况下,确定第三存放值是分组相似集编号为j的分组相似集归并的最小归并分组集的编号;
[0119]
在一些实施例中,若b[j]不为0,则说明在对应的有序链表中,j的右节点存放有比j更小的值,j并不是该分组相似集可以归并的最小归并分组集的编号,此时将b[j]存放的值作为新的索引值,寻找b[b[j]],并令b[j]=b[b[j]],直至b[b[j]]=0,则说明此时b[j]的存放值是分组相似集j可以归并的最小归并分组集编号。
[0120]
步骤s560,根据第二动态数组中存放值相同的所有项的索引值在各个存储分区中将对应的多个分组相似集合并,得到分区相似集。
[0121]
通过上述步骤,找到每个分组相似集可以归并的最小归并分组集之后,遍历第二动态数组,将存放值相同,即可以归并至同一最小归并分组集的所有分组相似集合并起来,即可得到多个分区相似集,可以理解的是,由于每个分组相似集在存储分区中可以归并的最小归并分组集是唯一的,因此,在同一存储分区内得到的多个分区相似集之间没有交集。基于此,在实现在各个存储分区内,初步将分组相似集合并,此时,可以通过第七处理文档记录每个分区相似集中的所有第一处理文档的编号,以方便后续在系统全局的粒度上对分区相似集合并;此外,步骤s510至步骤s560可以是在各个存储分区间分布式并行运行的,所需花费的总时间和数据量最大的存储分区执行上述步骤所花费时间相同,而由于在文档分组粒度上,已经对相似对进行初步合并,在存储分区粒度上需处理的数据量相对于第一处理文档的总量大大减少,由此,执行上述归并步骤所需的时间也大大减少,归并效率得到明显提升。
[0122]
步骤s600,根据第一处理文档的全局编号确定每个分区相似集的最小归并分区集,并将指向同一最小归并分区集的所有分区相似集合并,得到全局相似集,并通过第二处理文档记录每个全局相似集中的所有第一处理文档的全局编号;
[0123]
在存储分区粒度上完成分组相似集合并后,即可在系统全局的粒度上对分区相似
集进一步合并,参考上述实施例,首先对第七处理文档进行collect操作,将所有分区相似集汇总到master节点,参照图6,步骤s600包括但不限于如下步骤s610至步骤s620。
[0124]
步骤s610,对分区相似集进行编号,并根据全局编号和分区相似集的编号构建第三哈希表,其中,第三哈希表的键值是第一处理文档的全局编号,第三哈希表的真值是包括对应于键值的第一处理文档的所有分区相似集的编号构成的有序链表;
[0125]
对所有分区相似集从1开始编号,再以第一处理文档的全局编号作为第二希表的键值,再将包括第一处理文档的所有分组相似集的编号构成有序链表,以该有序链表作为与该键值对应的真值,比如,编号为1、3、7、10的分组相似集均包括全局编号为1的第一处理文档,则在第三哈希表中,键值为1的项存放的真值即是10、7、3、1构成的有序链表。
[0126]
步骤s620,构建第三动态数组并根据第三哈希表对第三动态数组赋值,根据赋值结果确定每个分区相似集归并的最小全局集,将指向同一最小全局集的多个分区相似集合并,得到全局相似集,通过第二处理文档记录各个全局相似集中的所有第一处理文档的全局编号。
[0127]
参照图7,在一些实施例中,步骤s620包括但不限于如下步骤s710至步骤s770
[0128]
步骤s710,构建并初始化第三动态数组;
[0129]
可以理解的是,初始化第三动态数组中的每一项的初始存放值均是0
[0130]
步骤s720,扫描第三哈希表以对第三动态数组赋值,赋值后的第三动态数组的每一项的索引值是分区相似集的编号,每一项存储的初值是第三哈希表的真值中位于索引值的后一项的分区相似集的编号;
[0131]
在本实施例中,通过扫描哈希表的真值,实现对第三动态数组的赋值,具体的,哈希表的真值是包括同一第一处理文档的多个分区相似集的编号构成的有序链表,该链表可以是倒排列表,将有序链表中依次相邻的两个值作为第三动态数组的索引值和存放值以对第三动态数组赋值。
[0132]
步骤s730,对第三动态数组的第k项,获取第k项的第五存放值,在第五存放值为第三预设值的情况下,令第五存放值为k,其中,k是正整数;
[0133]
在本实施例中,在扫描第三哈希表对第三动态数组赋值前,第三动态数组的每一项初始存放值均是0,基于此,第三预设值取0,对第三动态数组的第k项,获取其存放值b[k],若b[k]为0,则说明在哈希表的value中,k是有序链表最右端的节点,与编号k的分区相似集包含同一第一处理文档的所有分区相似集中,k是最小编号,因此,可以将编号k的分区相似集视为其本身可归并的最小归并分区集,故令b[k]=k。
[0134]
步骤s740,在第五存放值不为第三预设值的情况下,获取第三动态数组中以第五存放值作为索引值的项的第六存放值,在第六存放值不为第三预设值的情况下,将第六存放值作为新的第五存放值,并以新的第五存放值作为索引值获取新的第六存放值,直至第六存放值为第三预设值;
[0135]
步骤s750,在第六存放值是第三预设值的情况下,确定第五存放值是分区相似集编号为k的分区相似集归并的最小归并分区集的编号;
[0136]
在一些实施例中,若b[k]不为0,则说明在对应的有序链表中,k的右节点存放有比k更小的值,k并不是该分区相似集可以归并的最小归并分区集的编号,此时将b[k]存放的值作为新的索引值,寻找b[b[k]],并令b[k]=b[b[k]],直至b[b[k]]=0,则说明此时b[k]
的存放值是分区相似集k可以归并的最小归并分区集编号。
[0137]
步骤s760,根据第三动态数组中存放值相同的所有项的索引值多个分区相似集合并,得到全局相似集;
[0138]
通过上述步骤,找到每个分区相似集可以归并的最小归并分区集之后,遍历第三动态数组,将存放值相同,即可以归并至同一最小归并分区集的所有分区相似集合并起来,即可得到多个全局相似集,可以理解的是,由于每个分区相似集可以归并的最小归并分区集是唯一的,因此,多个全局相似集之间没有交集。
[0139]
步骤s770,通过第二处理文档记录每个全局相似集中所包括的第一处理文档的全局编号。
[0140]
在master节点将各个分区相似集合并,得到多个全局相似集后,可以通过第二处理文档记录每个全局相似集中的所有第一处理文档的编号。
[0141]
在本实施例中,在全局master节点,将各个存储分区中的分区相似集汇聚,再对其进行合并,由于在此过程中,第一处理文档已经经过文档分组以及存储分区两个粒度上的初步合并,汇总至全局master节点进行处理时的数据量相较于第一处理文档的原数量已经大大减少,进行合并处理时所需的时间也随之减少,合并效率得到明显提高。
[0142]
步骤s700,从第二处理文档中去除每个全局相似集中的第一个全局编号,并将所有全局相似集中的余下的所有全局编号汇总,得到待消除文档编号集,将待消除文档编号集广播至各个存储分区中;
[0143]
步骤s800,在各个存储分区中,根据待消除文档编号集对第一处理文档进行过滤操作。
[0144]
可以理解的是,第二处理文档中记录有每个全局相似集中的所有第一处理文档的全局编号,处于同一全局相似集中多个第一处理文档均是相似的,仅需保留一个即可,其余第一处理文档可视为重复冗余的数据,需进行去重,由此,在本实施例中,剔除每个全局相似集中第一个第一处理文档的全局编号,再将余下的全局编号汇总,即得到待消除文档的全局编号集,将该文档编号集广播至每个存储分区中,再在各个存储分区中,根据待消除文档编号集对第一处理文档执行过滤操作,将全局编号出现在待消除文档编号集中的第一处理文档过滤,从而完成去重。可以理解的是,步骤s800是在各个存储分区中分布式并行运行的,相较于在全局层面上统一过滤,在存储分区中并行运行可以有效减少各个存储分区的过滤量,提高去重效率。
[0145]
在一些实施例中,还可以从各个存储分区中将过滤后剩下的第一处理文档保存至文件系统,从而将去重后的高质量语料数据保存。
[0146]
本技术实施例提出一种基于spark的大规模数据去重方法,实现从局部到全局的分布式的相似对剔除流程。在进行海明校验得到的是大量的相似对后,从三个粒度对相似对进行全局合并。第一个阶段,在每个分组里,扫描所有相似对结果,给每个相似对一个编号,同时动态的构建一个记录文档编号-相似对编号的倒排列表,倒排列表记录了每个文档出现在哪些相似对中,并且每个文档对应的列表递增排序,另外用一个数组b记录每个相似对可以合并的最小相似对编号。倒排表构建完成后,逐项扫描倒排表中的每个列表,假设每个列表的第一项编号为f,记录b[f]为min(b[f],f),此后对于列表的每一项编号i,记录b[i]=min(b[i],b[f])。扫描结束后,b数组将得到每个相似对可以合并到的最小相似对编
号,遍历b数组把那些b数组值相同的相似对合并到一起,得到每个分组的合并后的相似集合,这些相似集合之间没有交集,集合数量相较于相似对数量也明显减少。第二阶段是存储分区粒度的合并,基于每个分组得到的相似集合,以同样的方式构建一个倒排列表和b数组,以分组相似集作为对象,在分区粒度进行类似分组内的流程,得到分区级别的不相交的相似集合。第三阶段,将所有分区的结果汇总到spark的master节点,进行和分区内一样的处理,进一步合并各个不相交的相似集合,最终得到全局相似集,最后对每个全局相似集只保留其中任意一个文档,得到全局去重结果。其中,在文档分组和存储分区两个粒度进行合并时都是在分布式环境下并行进行处理,最终汇聚到master节点的集合数量已经较少,能轻松应对处理大规模的数据集,基于本实施例提出的基于spark的大规模数据全局去重方法,本技术有效解决了全局模糊去重合并的计算瓶颈问题,大大减少了对大规模数据模糊去重所需的时间,提高去重效率。
[0147]
参照图8,本技术实施例还提供了一种电子设备800,包括:
[0148]
至少一个处理器,以及,
[0149]
与至少一个处理器通信连接的存储器;其中,
[0150]
存储器存储有指令,指令被至少一个处理器执行,以使至少一个处理器执行指令时实现如本技术实施例中任一项的方法。
[0151]
下面结合图8对电子设备的硬件结构进行详细说明。该电子设备包括:处理器810、存储器820、输入/输出接口830、通信接口840和总线850。
[0152]
处理器810,可以采用通用的中央处理器(central processing unit,cpu)、微处理器、应用专用集成电路(application specific integrated circuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本技术实施例所提供的技术方案;
[0153]
存储器820,可以采用只读存储器(read only memory,rom)、静态存储设备、动态存储设备或者随机存取存储器(random access memory,ram)等形式实现。存储器820可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器820中,并由处理器810来调用执行本技术实施例的隐喻识别方法;
[0154]
输入/输出接口830,用于实现信息输入及输出;
[0155]
通信接口840,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信;
[0156]
总线850,在设备的各个组件(例如处理器810、存储器820、输入/输出接口830和通信接口840)之间传输信息;
[0157]
其中处理器810、存储器820、输入/输出接口830和通信接口840通过总线850实现彼此之间在设备内部的通信连接。
[0158]
本技术实施例还提供一种存储介质,该存储介质是计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令用于使计算机执行本技术实施例的隐喻识别方法。
[0159]
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施
方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0160]
本技术实施例描述的实施例是为了更加清楚的说明本技术实施例的技术方案,并不构成对于本技术实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
[0161]
本领域技术人员可以理解的是,图1至图8中示出的技术方案并不构成对本技术实施例的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。
[0162]
应当理解,在本技术中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
[0163]
以上参照附图说明了本技术实施例的优选实施例,并非因此局限本技术实施例的权利范围。本领域技术人员不脱离本技术实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本技术实施例的权利范围之内。
技术特征:
1.一种基于spark的大规模数据全局去重方法,其特征在于,所述方法包括:对大规模数据进行预处理,得到多个第一处理文档,并将所述第一处理文档分别存储至多个存储分区中;在各个存储分区中对所述第一处理文档进行分组,得到多个文档分组;在各个所述文档分组内对所述第一处理文档进行相似检测,得到多个相似对;根据所述第一处理文档的预配置的全局编号确定每个所述相似对的最小归并相似对,并将指向同一所述最小归并相似对的所有相似对合并,得到分组相似集;根据所述第一处理文档的全局编号确定每个所述分组相似集的最小归并分组集,并将指向同一所述最小归并分组集的所有分组相似集合并,得到分区相似集;根据所述第一处理文档的全局编号确定每个所述分区相似集的最小归并分区集,并将指向同一所述最小归并分区集的所有分区相似集合并,得到全局相似集,并通过第二处理文档记录每个所述全局相似集中的所有所述第一处理文档的所述全局编号;从所述第二处理文档中去除每个所述全局相似集中的第一个所述全局编号,并将所有所述全局相似集中的余下的所有所述全局编号汇总,得到待消除文档编号集,将所述待消除文档编号集广播至各个所述存储分区中;在各个所述存储分区中,根据所述待消除文档编号集对所述第一处理文档进行过滤操作。2.根据权利要求1所述的方法,其特征在于,所述根据所述第一处理文档的预配置的全局编号确定每个所述相似对的最小归并相似对,并将指向同一所述最小归并相似对的所有相似对合并,得到分组相似集,包括:对所述相似对进行编号,并根据所述第一处理文档的全局编号和所述相似对的编号构建第一哈希表,其中,所述第一哈希表的键值是所述第一处理文档的全局编号,所述第一哈希表的真值是包括对应于键值的所述第一处理文档的所有相似对的编号构成的有序链表;构建第一动态数组并根据所述第一哈希表对所述第一动态数组赋值,根据赋值结果确定每个所述相似对归并的最小相似对,将同一所述文档分组内指向同一所述最小相似对的多个相似对合并,得到分组相似集。3.根据权利要求1所述的方法,其特征在于,所述根据所述第一处理文档的全局编号确定每个所述分组相似集的最小归并分组集,并将指向同一所述最小归并分组集的所有分组相似集合并,得到分区相似集,包括:对所述分组相似集进行编号,根据所述全局编号和所述分组相似集的编号构建第二哈希表,其中,所述第二哈希表的键值是所述第一处理文档的全局编号,所述第二哈希表的真值是包括对应于键值的所述第一处理文档的所有分组相似集的编号构成的有序链表;构建第二动态数组并根据所述第二哈希表对所述第二动态数组赋值,根据赋值结果确定每个所述分组相似集归并的最小相似集,将同一所述存储分区内指向同一所述最小相似集的多个分组相似集合并,得到分区相似集。4.根据权利要求1所述的方法,其特征在于,所述根据所述第一处理文档的全局编号确定每个所述分区相似集的最小归并分区集,并将指向同一所述最小归并分区集的所有相似对合并,得到全局相似集,并通过第二处理文档记录每个所述全局相似集包括所有所述第一处理文档的所述全局编号,包括:
对所述分区相似集进行编号,并根据所述全局编号和所述分区相似集的编号构建第三哈希表,其中,所述第三哈希表的键值是所述第一处理文档的全局编号,所述第三哈希表的真值是包括对应于键值的所述第一处理文档的所有分区相似集的编号构成的有序链表;构建第三动态数组并根据所述第三哈希表对所述第三动态数组赋值,根据赋值结果确定每个所述分区相似集归并的最小全局集,将指向同一所述最小全局集的多个分区相似集合并,得到全局相似集,通过第二处理文档记录各个所述全局相似集中的所有所述第一处理文档的全局编号。5.根据权利要求2所述的方法,其特征在于,所述构建第一动态数组并根据所述第一哈希表对所述第一动态数组赋值,根据赋值结果确定每个所述相似对归并的最小相似对,将同一所述文档分组内指向同一所述最小相似对的多个相似对合并,得到分组相似集,包括:构建并初始化所述第一动态数组;扫描所述第一哈希表以对所述第一动态数组赋值,赋值后的所述第一动态数组的每一项的索引值是所述相似对的编号,每一项存储的初值是所述第一哈希表的真值中位于所述索引值的后一项的相似对的编号;对所述第一动态数组的第i项,获取第i项的第一存放值,在所述第一存放值为第一预设值的情况下,令所述第一存放值为i,其中,i是正整数;在所述第一存放值不为所述第一预设值的情况下,获取所述第一动态数组中以所述第一存放值作为索引值的项的第二存放值,在所述第二存放值不为所述第一预设值的情况下,将所述第二存放值作为新的所述第一存放值,并以所述新的第一存放值作为索引值获取新的所述第二存放值,直至所述第二存放值为所述第一预设值;在所述第二存放值是所述第一预设值的情况下,确定所述第一存放值是相似对编号为i的相似对归并的最小相似对的编号;根据所述第一动态数组中存放值相同的所有项的索引值在各个所述文档分组中将对应的多个相似对合并,得到所述分组相似集。6.根据权利要求3所述的方法,其特征在于,所述构建第二动态数组并根据所述第二哈希表对所述第二动态数组赋值,根据赋值结果确定每个所述分组相似集归并的最小相似集,将同一所述存储分区内指向同一所述最小相似集的多个分组相似集合并,得到分区相似集,包括:构建并初始化所述第二动态数组;扫描所述第二哈希表以对所述第二动态数组赋值,赋值后的所述第二动态数组的每一项的索引值是所述分组相似集的编号,每一项存储的初值是所述第二哈希表的真值中位于所述索引值的后一项的分组相似集的编号;对所述第二动态数组的第j项,获取第j项的第三存放值,在所述第三存放值为第二预设值的情况下,令所述第三存放值为j,其中,j为正整数;在所述第三存放值不为第二预设值的情况下,获取所述第二动态数组中以所述第三存放值作为索引值的项的第四存放值,在所述第四存放值不为所述第二预设值的情况下,将所述第四存放值作为新的所述第三存放值,并以所述新的第三存放值作为索引值获取新的所述第四存放值,直至所述第四存放值为所述第二预设值;在所述第四存放值是所述第二预设值的情况下,确定所述第三存放值是分组相似集编
号为i的分组相似集归并的最小相似集的编号;根据所述第二动态数组中存放值相同的所有项的索引值将对应的多个所述分组相似集合并,得到所述分区相似集。7.根据权利要求4所述的方法,其特征在于,所述构建第三动态数组并根据所述第三哈希表对所述第三动态数组赋值,根据赋值结果确定每个所述分区相似集归并的最小全局集,将指向同一所述最小全局集的多个分区相似集合并,得到全局相似集,通过第二处理文档记录各个所述全局相似集中所包括的所有所述第一处理文档的全局编号,包括:构建并初始化所述第三动态数组;扫描所述第三哈希表以对所述第三动态数组赋值,赋值后的所述第三动态数组的每一项的索引值是所述分区相似集的编号,每一项存储的初值是所述第三哈希表的真值中位于所述索引值的后一项的分区相似集的编号;对所述第三动态数组的第k项,获取第k项的第五存放值,在所述第五存放值为第三预设值的情况下,令所述第五存放值为k,其中,k是正整数;在所述第五存放值不为所述第三预设值的情况下,获取所述第三动态数组中以所述第五存放值作为索引值的项的第六存放值,在所述第六存放值不为所述第三预设值的情况下,将所述第六存放值作为新的所述第五存放值,并以所述新的第五存放值作为索引值获取新的所述第六存放值,直至所述第六存放值为所述第三预设值;在所述第六存放值为所述第三预设值的情况下,确定所述第五存放值是分区相似集编号为j的分区相似集归并的全局相似集的编号;根据所述第三动态数组中存放值相同的所有项的索引值将对应的所述分区相似集合并,得到所述全局相似集;通过第二处理文档记录每个所述全局相似集中所包括的第一处理文档的全局编号。8.根据权利要求1所述的方法,其特征在于,所述对大规模数据进行预处理,得到多个第一处理文档,并将所述第一处理文档分别存储至多个存储分区中,包括:从所述大规模数据提取多个原始输入文档,并对所述原始输入文档进行编号,得到每个所述原始输入文档的全局编号;对所有所述原始输入文档进行分词处理,将所述原始输入文档转化为包括多个单词的单词集合;计算每个单词的哈希编码;根据所述哈希编码、所述全局编号生成与每个所述原始输入文档对应的所述第一处理文档并将所有所述第一处理文档存储至各个存储分区中。9.根据权利要求1所述的方法,其特征在于,所述在各个存储分区中对所述第一处理文档进行分组,得到多个文档分组,包括:计算所述第一处理文档中的每个单词的词频,并根据所述词频对每个所述第一处理文档中的单词进行排序,对排序后的所述第一处理文档进行前缀剪枝处理,得到每个所述第一处理文档的前缀数组;在每个所述存储分区中,将前缀数组中包括至少一个相同单词的所述第一处理文档划入同一分组,得到多个所述文档分组。10.根据权利要求1所述方法,其特征在于,所述在各个所述文档分组内对所述第一处
理文档进行相似检测,得到多个相似对,包括:通过预设算法计算每个所述第一处理文档的文档指纹;根据所述文档指纹确定每个所述文档分组内的所述第一处理文档之间的海明距离;将所述海明距离小于第四预设值的所述第一处理文档划为相似对。11.一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至10中任意一项所述的基于spark的大规模数据全局去重方法。12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器运行,以实现如权利要求1至10中任一项所述的基于spark的大规模数据全局去重方法。
技术总结
本申请提出一种基于Spark的大规模数据去重方法、电子设备和存储介质,通过将大规模语料数据进行预处理,将预处理后得到的第一处理文档存储至不同存储分区,再在各个存储分区内对第一处理文档进行分组,从而排除大量完全不相关的文档,再进行相似检测得到每个第一处理文档的相似对,并在文档分组、存储分区以及全局三种粒度上对相似对进行合并,在文档分组和存储分区的粒度上通过分布式并行运行的方法对相似对进行高效率合并,大大减少系统全局粒度上合并的计算量,从而实现对大规模数据的高效率模糊去重。效率模糊去重。效率模糊去重。
技术研发人员:邓凌风 张水勇 耿林 徐春香 王晖 余跃
受保护的技术使用者:鹏城实验室
技术研发日:2023.04.18
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种气体轴承、压缩机的制作方法 下一篇:一种呼吸机用的空氧混合器的制作方法
