CN108089853B - 基于Hadoop的并行Misra-Gries方法 - Google Patents

基于Hadoop的并行Misra-Gries方法 Download PDF

Info

Publication number
CN108089853B
CN108089853B CN201711473770.8A CN201711473770A CN108089853B CN 108089853 B CN108089853 B CN 108089853B CN 201711473770 A CN201711473770 A CN 201711473770A CN 108089853 B CN108089853 B CN 108089853B
Authority
CN
China
Prior art keywords
data
misra
count
hadoop
gries
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711473770.8A
Other languages
English (en)
Other versions
CN108089853A (zh
Inventor
王宏志
秦谦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhenjiang Duoyou Network Technology Co.,Ltd.
Original Assignee
Zhenjiang Duoyou Network Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhenjiang Duoyou Network Technology Co ltd filed Critical Zhenjiang Duoyou Network Technology Co ltd
Priority to CN201711473770.8A priority Critical patent/CN108089853B/zh
Publication of CN108089853A publication Critical patent/CN108089853A/zh
Application granted granted Critical
Publication of CN108089853B publication Critical patent/CN108089853B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于Hadoop的并行Misra‑Gries方法,把要进行实验的数据表导入到mysql数据库中,通过input函数将其导入到程序当中,Hadoop自动将输入数据平均分配到不同的map机器上;然后在map机器上采用普通的Misra‑Gries算法得出每个Map类的结果,再利用Hadoop提供的shuffle将key值相同的key‑value对分配到同一台Reduce机器上,最后采用改进的Misra‑Gries方法计算出结果。本发明无论是时间效率还是空间效率都要优于普通的Misra‑Gries算法,并对大规模数据表的适应性更强。

Description

基于Hadoop的并行Misra-Gries方法
技术领域
本发明涉及一种基于Hadoop的并行Misra-Gries方法,属于数据处理技术领域。
背景技术
随着网络技术和社会发展越来越迅速,人们不满足于仅仅用数据库来进行数据的存储,人们更希望用它来进行更深层次的分析,找出它们的频繁项就是数据库的一个重要作用。人们希望通过频繁项挖掘技术掌握商业主动权,通过计算机来获取潜在的客户。服务行业希望能通过频繁项挖掘来给顾客更好的服务,数据库不再是一个企业,一个人的东西,它涉及到了人们生产生活的方方面面。
此外,其实频繁项挖掘的延伸便是频繁项集的挖掘,频繁项挖掘也可以看成是频繁项集中元素个数为一的频繁项集挖掘。频繁项挖掘虽然看起来简单,但它却是许多数据挖掘算法的基础。
随着数据量的迅速增长,普通数据库的频繁项挖掘技术面临越来越大的挑战。当数据远大于机器的内存甚至硬盘的时候,如何处理数据,才能使得程序照常运行,应用分布式解决大规模数据库的问题使得我们对于这些问题的研究成为了可能。
Misra-Gries算法是一种比较传统的频繁项挖掘技术的算法。该算法的基本思想是:首先初始化一个空数组A,每到来一个数据j,如果j在这个数组内,则A[j]=A[j]+1;如果j不在,而且A的大小小于k-1,则A[j]=1;如果这两种情况都不是,则对于A中的每一个元素c,A[c]=A[c]-1。如果A[c]==0,则将c从A中除去。对于要访问的数据a,如果a在A中,则fa==A[a];如果不在,则fa==0。
与Misra-Gries算法相似的算法还有Conut-sketch 算法和Count-min sketch算法。Count-sketch算法是略图(sketch)算法的一种,而Count-min sketch是Count-sketch算法的一个延伸。尽管略图算法的执行效率在Misra-Gries算法之上,但它的准确度要比Misra-Gries算法低,更重要的是它相对来说复杂许多,在分布式环境下执行,开发难度较大。
发明内容
本发明所要解决的技术问题是克服现有技术的缺陷,提供一种基于Hadoop的并行Misra-Gries方法,通过改进Misra-Gries 算法,并在 hadoop 平台进行分布式的运算,更加高效。
为解决上述技术问题,本发明提供一种基于Hadoop的并行Misra-Gries方法,包括以下步骤:
1)把要进行实验的数据表导入到mysql数据库中,然后通过input函数将其导入到程序当中,Hadoop对输入数据进行拆分,将其平均的分配到不同的map机器上;
2)在map机器上采用Map函数对输入数据的频繁项进行处理,每个频繁项输出一个包含频繁项名和一个计数f的结果,称为key-value对;
3)利用Hadoop提供的shuffle将key值相同的key-value对分配到同一台Reduce机器上;
4)采用改进的Misra-Gries 方法执行Reduce函数。
前述的步骤2)中,一个map机器上的Map类获得的数据的个数需要同时输出到Reduce类当中。
前述的采用Hadoop中的reporter.getInputSplit()函数得到输入的所有数据,再用getLength()函数得到一共执行了多少遍map()函数,然后将结果输出到Reduce类当中。
前述的步骤4)中改进的Misra-Gries 方法,具体为:
4-1)得到Map类输出的数据,设到达的这个数据是i,计数是c;如果Reduce函数生成的输出数组I中有i,则转入步骤4-2);如果I中没有该数据i且I的大小小于k-1,则转入步骤4-3);如果果I中没有该数据i且I的大小大于等于k-1,则转入步骤4-4);其中,k为预先设定的频繁项阈值;
4-2)将计数c与I中的那个项的计数相加,更新输出数组I中数据i的计数,返回步骤4-1);
4-3)直接将这个数据i加入到数组I中,返回步骤4-1);
4-4)找到数组I中计数最小的那个数据,设这个数据的计数为min;
4-5)将该计数min与c比较,如果大于c,那么I中每个数据的计数都减去c;如果小于c,则将c减去这个计数min后,加入到I中,并将数组I的其他计数都减去min;返回步骤4-1)。
前述的步骤4-1)中,Map类输出的数据是一个个到达Reduce类的。
前述的频繁项是指在一个集合中,某项出现的频数大于设定的阈值,就是频繁项。
本发明所达到的有益效果:
本发明通过改进Misra-Gries 算法,并在 hadoop 平台进行分布式的运算,无论是时间效率还是空间效率都要优于普通的Misra-Gries算法,并对大规模数据表的适应性更强。
附图说明
图1 为本发明方法的流程图。
具体实施方式
下面对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
本发明的基于 Hadoop 的并行 Misra-Gries方法分为三个部分,其一是输入部分,其二是Map类的实现,其三是Reduce类的实现。具体流程如图1所示:
1)输入部分主要是连接mysql数据库,首先把要进行实验的数据表导入到mysql数据库中,然后通过input函数将其导入到程序当中。然后Hadoop会根据自己默认的规则(也可以自己定义)对输入数据进行拆分,将其尽量平均的分配到不同的map机器上。此处Hadoop会自动的进行负载平衡操作。
2)Map类的实现主要就是普通的Misra-Gries算法。首先,需要得到一个map机器上的Map类到底获得了多少数据,因为每个数据的输入,都会运行一遍map()函数。而最后输入数据的个数是要一起输出到Reduce类当中的。Hadoop中的reporter.getInputSplit()函数可以得到输入的所有数据,再用getLength()函数就可以得到一共执行了多少遍map()函数,这样结果就可以最后输出到Reduce类当中。
3)Reduce类的实现,Hadoop提供的shuffle可以自动的将key值相同的key-value对由同一台执行Reduce函数的机器上的Reduce类来实现,也就是说,在map()当中,已经将同一个项集的key-value对中的key值设为相同的数,以便这些结果可以在一个Reduce类中处理。而每个Map类已经有了一个处理过后的结果A,该结果是由Map函数产生的,由频繁项中的元素通过哈希函数计算出来的,结果中保存着频繁项名和一个计数f,这样改进后的Misra-Gries,就不用一个个加,一个个减这么麻烦。所以改进后的Misra-Gries算法具体过程如下:
首先,得到Map类输出的数据,当然这些数据是一个个到达Reduce类的。设到达的这个数据是i,计数是c。如果Reduce函数生成的输出数组I中有i,那么将计数c与I中的那个项的计数相加,更新输出数组I中数据i的计数。如果I中没有这个数据且I的大小小于k-1,那么就直接将这个数据加入到I中,其中,k为预先设定的频繁项阈值。如果I中没有这个数据且I的大小大于等于k-1,则先找到I中计数最小的那个数据,设这个数据的计数为min,将该计数与c比较,如果大于c,那么I中每个数据的计数都减去c;如果小于c,则将c减去这个计数min后,加入到I中,并将数组I的其他计数都减去min。代码如下:
Initialize: I -> (empty associative array)
Process i,c
If i∈I then //当i在I中的情况
I[i]<-I[i]+c;
Else if |I| < k - 1 //当I的大小小于k-1
I[i]<-c;
Else
Min<-Find_min(I); //Find_min(I)是找到I的最小值
If min > c //最小值大于输入的值
Foreach l ∈I do
I[l]<- I[l] - c;
If I[l] <= 0
Remove I[l];
Else if min < c //最小值小于输入的值
Foreach l ∈I do
I[l]<- I[l] - min;
I[i]<- c - min;
If I[l] <= 0
Remove I[l];
Remove I[c(min)]; // 删掉min所在的项。
Else
Foreach l∈I do
I[l]<- I[l] - min;
If I[l] <= 0
Remove I[l];
Output: On query a, if a∈I ,Output I[a] else Output 0
本发明中频繁项是指在一个集合中,频繁出现的项,就是频繁项。
值得注意的是,对于Misra-Gries算法在hadoop上首先要考虑的是如何进行拆分,然后要考虑的是如何进行合并。我们需要保证的是,在数据的拆分和合并过程中,不会出现结果错误。对于这一点,证明如下:
a:f>m/k(f为每个频繁项的频数,m为数据总数,k为自定义的阈值)的频繁项最多有k-1个。
证明:假设f>m/k的频繁项有k个,则f1+f2+…+fk>k*m/k=m∵数据的总数为m,而f1+…+fk>m∴与条件矛盾∴f>m/k的频繁项至多有k-1个。fi表示第i个频繁项的频数,i=1,2,……,k。
:所有f>m/k的项都会被Misra-Gries算法检测出。
证明:正如Misra-Gries算法,可以看出A[j]中每一个数值的减少都被k个值所“监视”着(其中也包含j自己),也就是说假如数据一共有m个,A中已有的每个值都至多被减少了m/k次。所以A中的每一项都是f>m/k的。由此,可以得出A[j]中的计数大于等于fj-m/k,小于等于fj的。
还可以从以上得知,如果f>m/k,那么它就一定在A当中。 这个定理证明了Misra-Gries算法的可行性。
:用Map将数据库分割成n份,用Misra-Gries算法算出的结果,用Reduce合并时,最终结果也一定在这n份各自算出的结果之中。
证明:由上述证明可知,用Misra-Gries算法f>m/k的项一定在结果当中。设Map分割成n份最后的结果分别是A1……An,n份的总数分别为m1, m2,..., mn,由上述证明知道f>m/k的项一定在A中,也就是说不在A当中的项f<=m/k,所以如果一个项不在A1……An任何一个的话,那么它的频数f1+……+fn< /k+……+ /k=m/k,所以这样的数肯定不在结果当中,即结果肯定在A1……An中。
上述证明表明设计出的在分布式下计算的Misra-Gries算法是可行的,正确的结果一定会在Map的运算结果之中。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (6)

1.基于Hadoop的并行Misra-Gries方法,其特征在于,包括以下步骤:
1)把要进行实验的数据表导入到mysql数据库中,然后通过input函数将其导入到程序当中,Hadoop对输入数据进行拆分,将其平均的分配到不同的map机器上;
2)在map机器上采用Map函数对输入数据的频繁项进行处理,每个频繁项输出一个包含频繁项名和一个计数f的结果,称为key-value对;
3)利用Hadoop提供的shuffle将key值相同的key-value对分配到同一台Reduce机器上;
4)采用改进的Misra-Gries方法执行Reduce函数。
2.根据权利要求1所述的基于Hadoop的并行Misra-Gries方法,其特征在于,所述步骤2)中,一个map机器上的Map类获得的数据的个数需要同时输出到Reduce类当中。
3.根据权利要求2所述的基于Hadoop的并行Misra-Gries方法,其特征在于,采用Hadoop中的reporter.getInputSplit()函数得到输入的所有数据,再用getLength()函数得到一共执行了多少遍map()函数,然后将结果输出到Reduce类当中。
4.根据权利要求1所述的基于Hadoop的并行Misra-Gries方法,其特征在于,所述步骤4)中改进的Misra-Gries方法,具体为:
4-1)得到Map类输出的数据,设到达的这个数据是i,计数是c;如果Reduce函数生成的输出数组I中有i,则转入步骤4-2);如果I中没有该数据i且I的大小小于k-1,则转入步骤4-3);如果I中没有该数据i且I的大小大于等于k-1,则转入步骤4-4);其中,k为预先设定的频繁项阈值;
4-2)将计数c与I中的那个项的计数相加,更新输出数组I中数据i的计数,返回步骤4-1);
4-3)直接将这个数据i加入到数组I中,返回步骤4-1);
4-4)找到数组I中计数最小的那个数据,设这个数据的计数为min;
4-5)将该计数min与c比较,如果大于c,那么I中每个数据的计数都减去c;如果小于c,则将c减去这个计数min后,加入到I中,并将数组I的其他计数都减去min;返回步骤4-1)。
5.根据权利要求1所述的基于Hadoop的并行Misra-Gries方法,其特征在于,所述步骤4-1)中,Map类输出的数据是一个个到达Reduce类的。
6.根据权利要求1所述的基于Hadoop的并行Misra-Gries方法,其特征在于,所述频繁项是指在一个集合中,某项出现的频数大于设定的阈值,就是频繁项。
CN201711473770.8A 2017-12-29 2017-12-29 基于Hadoop的并行Misra-Gries方法 Active CN108089853B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711473770.8A CN108089853B (zh) 2017-12-29 2017-12-29 基于Hadoop的并行Misra-Gries方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711473770.8A CN108089853B (zh) 2017-12-29 2017-12-29 基于Hadoop的并行Misra-Gries方法

Publications (2)

Publication Number Publication Date
CN108089853A CN108089853A (zh) 2018-05-29
CN108089853B true CN108089853B (zh) 2021-03-16

Family

ID=62180564

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711473770.8A Active CN108089853B (zh) 2017-12-29 2017-12-29 基于Hadoop的并行Misra-Gries方法

Country Status (1)

Country Link
CN (1) CN108089853B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102142992A (zh) * 2011-01-11 2011-08-03 浪潮通信信息系统有限公司 通信告警频繁项集挖掘引擎及冗余处理方法
CN106815302A (zh) * 2016-12-13 2017-06-09 华中科技大学 一种应用于游戏道具推荐的频繁项集挖掘方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8321579B2 (en) * 2007-07-26 2012-11-27 International Business Machines Corporation System and method for analyzing streams and counting stream items on multi-core processors

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102142992A (zh) * 2011-01-11 2011-08-03 浪潮通信信息系统有限公司 通信告警频繁项集挖掘引擎及冗余处理方法
CN106815302A (zh) * 2016-12-13 2017-06-09 华中科技大学 一种应用于游戏道具推荐的频繁项集挖掘方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
MapReduce大数据处理平台与算法研究进展;宋杰等;《软件学报》;20170331;第28卷(第3期);514-543 *
大数据算法;易珂;《中国计算机学会通讯》;20121231;第8卷(第12期);60-63 *

Also Published As

Publication number Publication date
CN108089853A (zh) 2018-05-29

Similar Documents

Publication Publication Date Title
US10176224B2 (en) Query plan optimization for large payload columns
WO2014105923A2 (en) Detecting anomalies in behavioral network with contextual side information
US9116879B2 (en) Dynamic rule reordering for message classification
CN109032803B (zh) 数据处理方法和装置、客户端
US11615209B2 (en) Big data k-anonymizing by parallel semantic micro-aggregation
US10387501B2 (en) Grouping records in buckets distributed across nodes of a distributed database system to perform comparison of the grouped records
CN109983467B (zh) 用于匿名化数据集的系统和方法
EP3494487A1 (en) Learned data filtering
WO2014021978A4 (en) Aggregating data in a mediation system
US10311093B2 (en) Entity resolution from documents
US20160292234A1 (en) Method and system for searching in a distributed database
CN109145053B (zh) 数据处理方法和装置、客户端、服务器
US20210365300A9 (en) Systems and methods for dynamic partitioning in distributed environments
CN108089853B (zh) 基于Hadoop的并行Misra-Gries方法
WO2018161403A1 (zh) 报表的数据统计方法和系统
Kim et al. Parallel processing of multiple graph queries using MapReduce
Shukla et al. Big data frameworks: at a glance
US9135300B1 (en) Efficient sampling with replacement
US20210103478A1 (en) Systems and methods for dynamic partitioning in distributed environments
CN104598567A (zh) 一种基于Hadoop MapReduce编程框架的数据统计排重的方法
DATASET UDS-FIM: an efficient algorithm of frequent itemsets mining over uncertain transaction data streams
CN107248929B (zh) 一种多维关联数据的强关联数据生成方法
CN106776616B (zh) 合并对称实体组的方法及装置
US11269595B2 (en) Encoding and evaluating multisets using prime numbers
US11914653B1 (en) Systems and methods for removing human genetic data from genetic sequences

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20210218

Address after: No. 55 Chaoyang Road, Xinminzhou, Jingkou District, Zhenjiang City, Jiangsu Province, 212000

Applicant after: Zhenjiang Duoyou Network Technology Co.,Ltd.

Address before: 212004 6 building, Jingkou high tech center, 118 Xuefu Road, Jingkou District, Zhenjiang, Jiangsu.

Applicant before: JIANGSU MINGTONG TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Parallel Misra Gries method based on Hadoop

Effective date of registration: 20211228

Granted publication date: 20210316

Pledgee: Jurong sub branch of Bank of Nanjing Co.,Ltd.

Pledgor: Zhenjiang Duoyou Network Technology Co.,Ltd.

Registration number: Y2021980016733

PE01 Entry into force of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Granted publication date: 20210316

Pledgee: Jurong sub branch of Bank of Nanjing Co.,Ltd.

Pledgor: Zhenjiang Duoyou Network Technology Co.,Ltd.

Registration number: Y2021980016733

PC01 Cancellation of the registration of the contract for pledge of patent right