CN108334532B - 一种基于Spark的Eclat并行化方法、系统及装置 - Google Patents
一种基于Spark的Eclat并行化方法、系统及装置 Download PDFInfo
- Publication number
- CN108334532B CN108334532B CN201710888436.2A CN201710888436A CN108334532B CN 108334532 B CN108334532 B CN 108334532B CN 201710888436 A CN201710888436 A CN 201710888436A CN 108334532 B CN108334532 B CN 108334532B
- Authority
- CN
- China
- Prior art keywords
- transaction database
- partition data
- vertical
- transaction
- frequent
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
Abstract
本发明公开了一种基于Spark的Eclat并行化方法、系统及装置,方法包括对事务数据库进行预处理,生成垂直事务数据库;将垂直事务数据库缓存至各个计算节点;对垂直事务数据库进行分发计算操作,得到多个频繁集;对多个频繁集进行合并操作,输出满足最小支持度的频繁集。系统包括获取模块、缓存模块、分发模块和合并模块。装置包括存储器和处理器。本发明通过将垂直数据库缓存至各个计算节点,提高了现有Eclat并行化方法的运行效率,且通过对垂直事务数据库进行分发计算操作,降低了网络开销。本发明可广泛应用于关联分析领域。
Description
技术领域
本发明涉及关联分析领域,尤其是一种基于Spark的Eclat并行化方法、系统及装置。
背景技术
Spark计算框架是一个用于实现快速而通用的集群计算的框架,可以在分布式内存中进行并行计算,并能构建出不同处理模型的应用。
Eclat算法是一种用于生成频繁集和关联规则的关联算法,其主要操作为将事务数据库转化为垂直表达方式,然后对其进行交集操作,快速计算支持度,生成频繁集。
现有基于Spark计算框架的Eclat并行化方案采用等价类方法,通过低维频繁集生成高维候选集,每次迭代操作都通过一个处理器进行集中处理,导致迭代生成频繁集的效率低下。另外,现有Eclat并行化方法没有将垂直事务数据库缓存至各个计算节点,导致每次迭代过程中,每个计算节点都要访问其他计算节点的数据,造成了严重的数据依赖和巨大的网络开销,迭代效率很低。
发明内容
为解决上述技术问题,本发明的目的在于:提供一种网络开销小且运行效率高的基于Spark的Eclat并行化方法。
本发明的第二个目的在于:提供一种网络开销小且运行效率高的基于Spark的Eclat并行化系统。
本发明的第三个目的在于:提供一种网络开销小且运行效率高的基于Spark的Eclat并行化装置。
本发明所采取的第一个技术方案是:
一种基于Spark的Eclat并行化方法,包括以下步骤:
对事务数据库进行预处理,生成垂直事务数据库;
将垂直事务数据库缓存至各个计算节点;
对垂直事务数据库进行分发计算操作,得到多个频繁集;
对多个频繁集进行合并操作,输出满足最小支持度的频繁集。
进一步,所述对事务数据库进行预处理,生成垂直事务数据库这一步骤,包括以下步骤:
扫描事务数据库的所有项目;
根据扫描的项目对事务数据库的每一条事务进行扫描,生成垂直事务数据库;
根据垂直事务数据库计算频繁集。
进一步,所述将垂直事务数据库缓存至各个计算节点这一步骤,具体为:
通过广播的方式将垂直事务数据库缓存到集群的各个计算节点。
进一步,所述对垂直事务数据库进行分发计算操作,得到多个频繁集这一步骤,包括以下步骤:
将集群的每个计算节点划分为一个或多个分区;
将垂直事务数据库分发至划分的所有分区;
将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的所有分区数据的频繁集。
进一步,所述将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的每个分区数据的频繁集这一步骤,包括以下步骤:
S1、从分发后的分区数据中选择一个作为当前分区数据;
S2、对计算节点中缓存的垂直事务数据库进行扫描,得到多个事务,所述垂直事务数据库由事务组成;
S3、从得到的多个事务中选择一个作为当前事务;
S4、判断当前事务是否属于当前分区数据,若是,则执行步骤S5;反之,则从得到的多个事务中选择下一个作为当前事务并执行步骤S4;
S5、判断属于当前分区数据的事务是否满足设定的最小支持度要求,若是,则将属于当前分区数据的事务存入前缀树及当前分区数据对应的频繁集并执行步骤S6;反之,则直接执行步骤S6;
S6、将计算节点中缓存的垂直事务数据库与前缀树进行交运算;
S7、判断交运算后的事务是否满足设定的最小支持度要求,若是,则将交运算后的事务存入后缀树并执行步骤S8;反之,则直接执行步骤S8;
S8、判断前缀树是否为空,若是,则从得到的多个事务中选择下一个事务作为当前事务并返回步骤S4;反之,则执行步骤S9;
S9、判断后缀树是否为空,若是,则输出当前分区数据对应的频繁集并执行步骤S10;反之,则将后缀树作为垂直事务数据库并返回步骤S2,直至后缀树为空;
S10、从分发后的分区数据中选择下一个分区数据作为当前分区数据并返回步骤S2,直至输出对应于分发后的所有分区数据的频繁集。
进一步,所述对多个频繁集进行合并操作,输出满足最小支持度的频繁集这一步骤,具体为:将对应于分发后的所有分区数据的频繁集进行合并,输出满足最小支持度的频繁集。
本发明采取的第二个技术方案是:
一种基于Spark的Eclat并行化系统,包括:
获取模块,用于对事务数据库进行预处理,生成垂直事务数据库;
缓存模块,用于将垂直事务数据库缓存至各个计算节点;
分发模块,用于对垂直事务数据库进行分发计算操作,得到多个频繁集;
合并模块,用于对多个频繁集进行合并操作,输出满足最小支持度的频繁集。
进一步,所述获取模块,包括:
项目扫描单元,用于扫描事务数据库的所有项目;
事务扫描单元,用于根据扫描的项目对事务数据库的每一条事务进行扫描,生成垂直事务数据库;
计算单元,用于根据垂直事务数据库计算频繁集。
进一步,所述分发模块,包括:
划分单元,用于将集群的每个计算节点划分为一个或多个分区;
分发单元,用于将垂直事务数据库分发至划分的所有分区;
交集运算单元,用于将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的所有分区数据的频繁集。
本发明采取的第三个技术方案是:
一种基于Spark的Eclat并行化装置,包括:
存储器,用于存放程序;
处理器,执行所述程序,以用于对事务数据库进行预处理,生成垂直事务数据库;将垂直事务数据库缓存至各个计算节点;对垂直事务数据库进行分发计算操作,得到多个频繁集;对多个频繁集进行合并操作,输出满足最小支持度的频繁集。
本发明的方法的有益效果是:本发明的方法通过将垂直数据库缓存到各个计算节点,克服了现有Eclat并行化方法在迭代中需要相互访问各个计算节点的缺点,降低了网络开销并提高了运行效率;另外,本发明的方法通过对垂直事务数据库进行分发计算操作,克服了现有Eclat并行化方法的迭代过程仅通过一个处理器来进行集中处理的缺点,提高了迭代效率。
本发明的系统的有益效果是:本发明的系统通过缓存模块将垂直数据库缓存到各个计算节点,克服了现有Eclat并行化系统在迭代中需要相互访问各个计算节点的缺点,降低了网络开销并提高了运行效率;另外,本系统通过分发模块对垂直事务数据库进行分发计算操作,克服了现有Eclat并行化系统的迭代过程仅通过一个处理器来进行集中处理的缺点,提高了迭代效率。
本发明的装置的有益效果是:本发明的装置通过处理器将垂直数据库缓存到各个计算节点,克服了现有Eclat并行化装置在迭代中需要相互访问各个计算节点的缺点,降低了网络开销并提高了运行效率;另外,本发明的装置通过处理器对垂直事务数据库进行分发计算操作,克服了现有Eclat并行化装置的迭代过程仅通过一个处理器来进行集中处理的缺点,提高了迭代效率。
附图说明
图1为本发明一种基于Spark的Eclat并行化方法的步骤流程图;
图2为本发明实施例一的Eclat并行化过程示意图;
图3为本发明实施例一的Eclat并行化步骤流程图;
图4为本发明实施例一的整体步骤流程图。
具体实施方式
参照图1,一种基于Spark的Eclat并行化方法,包括以下步骤:
对事务数据库进行预处理,生成垂直事务数据库;
将垂直事务数据库缓存至各个计算节点;
对垂直事务数据库进行分发计算操作,得到多个频繁集;
对多个频繁集进行合并操作,输出满足最小支持度的频繁集。
其中,将垂直数据库缓存到各个计算节点,能够方便分布式计算过程中的访问操作,减小迭代过程中各个计算节点之间重复访问造成的网络开销。
进一步作为优选的实施方式,所述对事务数据库进行预处理,生成垂直事务数据库这一步骤,包括以下步骤:
扫描事务数据库的所有项目;
根据扫描的项目对事务数据库的每一条事务进行扫描,生成垂直事务数据库;
根据垂直事务数据库计算频繁集。
其中,所述根据垂直事务数据库计算频繁集这一步骤中的频繁集是初始生成的频繁集,其通过迭代计算可生成本发明的其余频繁集。
进一步作为优选的实施方式,所述将垂直事务数据库缓存至各个计算节点这一步骤,具体为:
通过广播的方式将垂直事务数据库缓存到集群的各个计算节点。
进一步作为优选的实施方式,所述对垂直事务数据库进行分发计算操作,得到多个频繁集这一步骤,包括以下步骤:
将集群的每个计算节点划分为一个或多个分区;
将垂直事务数据库分发至划分的所有分区;
将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的所有分区数据的频繁集。
其中,所述分区数据是指将垂直事务数据库分发到各个分区后形成的垂直事务数据库子集。
进一步作为优选的实施方式,所述将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的每个分区数据的频繁集这一步骤,包括以下步骤:
S1、从分发后的分区数据中选择一个作为当前分区数据;
S2、对计算节点中缓存的垂直事务数据库进行扫描,得到多个事务,所述垂直事务数据库由事务组成;
S3、从得到的多个事务中选择一个作为当前事务;
S4、判断当前事务是否属于当前分区数据,若是,则执行步骤S5;反之,则从得到的多个事务中选择下一个作为当前事务并执行步骤S4;
S5、判断属于当前分区数据的事务是否满足设定的最小支持度要求,若是,则将属于当前分区数据的事务存入前缀树及当前分区数据对应的频繁集并执行步骤S6;反之,则直接执行步骤S6;
S6、将计算节点中缓存的垂直事务数据库与前缀树进行交运算;
S7、判断交运算后的事务是否满足设定的最小支持度要求,若是,则将交运算后的事务存入后缀树并执行步骤S8;反之,则直接执行步骤S8;
S8、判断前缀树是否为空,若是,则从得到的多个事务中选择下一个事务作为当前事务并返回步骤S4;反之,则执行步骤S9;
S9、判断后缀树是否为空,若是,则输出当前分区数据对应的频繁集并执行步骤S10;反之,则将后缀树作为垂直事务数据库并返回步骤S2,直至后缀树为空;
S10、从分发后的分区数据中选择下一个分区数据作为当前分区数据并返回步骤S2,直至输出对应于分发后的所有分区数据的频繁集。
在每次判断得出后缀树为空的结果时,将会从分发后的分区数据中选择一个未被选过的分区数据作为当前分区数据,直到所有的分区数据都被选过为止。
因为在每次迭代的过程中都会将满足设定的最小支持度要求的事务存入当前分区数据对应的频繁集,故最终可通过多次迭代获得对应于分发后的所有分区数据的多个频繁集。
其中,所述前缀树用于存放满足最小支持度要求的事务并作为后续迭代的输入,能够有效减少迭代过程中生成的集合数目,提高运行效率。
后缀树用于存放交运算后生成的满足最小支持度要求的事务并作为后续迭代的输入,能够减少迭代过程的计算量,从而加快计算速度。
进一步作为优选的实施方式,所述对多个频繁集进行合并操作,输出满足最小支持度的频繁集这一步骤,具体为:将对应于分发后的所有分区数据的频繁集进行合并,输出满足最小支持度的频繁集。
与图1的方法相对应,本发明还提供了一种基于Spark的Eclat并行化系统,包括:
获取模块,用于对事务数据库进行预处理,生成垂直事务数据库;
缓存模块,用于将垂直事务数据库缓存至各个计算节点;
分发模块,用于对垂直事务数据库进行分发计算操作,得到多个频繁集;
合并模块,用于对多个频繁集进行合并操作,输出满足最小支持度的频繁集。
进一步作为优选的实施方式,所述获取模块,包括:
项目扫描单元,用于扫描事务数据库的所有项目;
事务扫描单元,用于根据扫描的项目对事务数据库的每一条事务进行扫描,生成垂直事务数据库;
计算单元,用于根据垂直事务数据库计算频繁集。
进一步作为优选的实施方式,所述分发模块,包括:
划分单元,用于将集群的每个计算节点划分为一个或多个分区;
分发单元,用于将垂直事务数据库分发至划分的所有分区;
交集运算单元,用于将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的所有分区数据的频繁集。
与图1的方法相对应,本发明还提供了一种基于Spark的Eclat并行化装置,包括:
存储器,用于存放程序;
处理器,执行所述程序,以用于对事务数据库进行预处理,生成垂直事务数据库;将垂直事务数据库缓存至各个计算节点;对垂直事务数据库进行分发计算操作,得到多个频繁集;对多个频繁集进行合并操作,输出满足最小支持度的频繁集。
下面结合说明书附图和具体实施例对本发明作进一步解释和说明。
实施例一
现有基于Spark计算框架的Eclat并行化方案采用等价类方法,通过低维频繁集生成高维候选集,每次迭代操作都运行在集群内,造成了多个计算节点之间复杂的网络通信过程,导致网络开销大且运行效率低下。另外,现有Eclat并行化方法在进行迭代操作时需要相互访问各个计算节点的数据,造成了严重的数据依赖,导致迭代效率很低。针对上述问题,本发明提出了一种基于Spark的Eclat并行化方法、系统和装置,通过将垂直数据库缓存到各个计算节点,降低了网络开销并提高了运行效率;另外,本发明还通过对垂直事务数据库进行分发计算操作,解决了数据依赖的问题,提高了迭代效率。
下面从名词解释和具体实现过程这两方面入手对本发明的基于Spark的Eclat并行化方法进行详细说明。
(一)名词解释
本发明涉及到的专有名词如下:
驱动器(Driver):每一个Spark应用都由一个驱动器程序(Driver Program)来发起集群上的各种并行操作。驱动器程序包含应用的main函数,即应用的入口程序,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作。
执行器(Executor):用于执行Spark应用各类操作的程序,驱动器程序一般管理多个执行器。集群中的每个计算节点包含一个或多个执行器,每个执行器包含一个或多个分区,每个分区对应一个执行任务。
项集(Itemset):假设I为一个项目(简称项)的集合,来自I的多个项的集合称为一个项集。如果一个项集由k个项目组成,则称之为k项集。如果一条事务包含k个元素,则该事务为k项集,相应地满足用户指定的最小支持度的k项集称为k项频繁集。
频繁集(Frequent ItemSet):假设D为关于一个项的集合I的事务数据库,D中的每一条事务t包含来自I的多个项的集合,简称项集;每一条事务t都有一个唯一的标记tid,表示为t.tid。一个项集X的支持度,表示为σ(X),代表包含子集为X的事务的个数。如果项集X是频繁的,则表示X的支持度σ(X)不小于用户指定的最小支持度的阈值。
支持度(Support):支持度Sup(A,B)=P(A,B),表示项目A和项目B同时发生的概率。
事务数据库(Transaction Database):事务是指数据库中处理的每一条记录,是项目(Item)的集合。由多条事务构成的数据库称为事务数据库。
分布式缓存;在算法开始阶段将RDD数据缓存到各个计算节点进行缓存,以供计算过程中的访问使用。
广播操作:将一份只读数据发送到所有计算节点,以供一个或多个Spark操作使用。
广播变量:由广播操作发送的只读值即为广播变量,它是一种共享变量类型。
弹性分区数据集(Resilient Distributed Dataset,RDD):Spark计算框架中的RDD是分布在集群中的只读对象集合,由多个分区构成,有多种存储级别,可以存储在磁盘或内存中,通过并行的转换操作进行构造,失效后可以进行自动重构。
shuffle:Spark分布式操作,会发生磁盘读写、网络传输等行为,包括join,reduceByKey,repartition等操作。shuffle过程分为shuffle write和shuffle read两个阶段。
事务差集(DiffSet):假设X、Y都为某个项的集合,则DiffSet(XY)=idSet(Y)-TidSet(X),此时支持度σ(XY)=σ(Y)-|DiffSet(XY)|。
(二)一种基于Spark的Eclat并行化方法的具体实现过程及实现原理
步骤一:获取并对事务数据库进行预处理,生成垂直事务数据库。
参照图4,记该步骤中输入的事务数据库为T,通过扫描事务数据库中的所有项目,获取T中所有事务,记每条事务的格式为(Tid,ItemSet);将所有事务分发到各个计算节点,通过并行计算生成垂直事务数据库VT,记每条垂直事务的格式为(Item,TidSet)。由于该步骤的各个子任务之间没有数据依赖,所以只需进行简单的分发计算就能得出一项频繁集。
例如,通过扫描事务数据库,得到关于项目a的多条事务,将包含a的多条事务做交集操作,得到如{a,b}、{a,c}、{a,e}等二项候选集,并将该候选集定义为ConditionalDB_A;此时,输出满足最小支持度的关于a的二项频繁集,并将ConditionDB_A作为新的一轮输入递归生成更高维度的频繁集。对于事务数据库中的其余项目,也同时执行以上步骤。
步骤二:将垂直事务数据库VT通过广播变量的形式,缓存至各个计算节点,作为缓存数据库。这种方式能够降低数据依赖度,提高运行效率。
参照图4,该步骤可称为广播操作,指的是将事务数据库提前缓存到各个计算节点,每个计算节点包含一个或多个分区,每个分区进行改进后的Eclat操作,分别处理所在分区的事务,递归生成多个维度的频繁集。此时,由于每个分区可以访问所在节点的垂直事务数据库,没有了数据依赖问题,所以不同维度频繁集的生成不需要交叉访问其余计算节点的数据,此时每个分区自行生成不同维度的频繁集,减少了每次迭代都需要进行的不同节点之间的数据通信问题。
步骤三:对垂直事务数据库VT进行分发计算操作,得到多个频繁集。
参照图3,主要是按照范围分区方式将垂直事务数据库进行拆分,同时发送至多个计算节点,并在计算节点上进行局部性的Eclat算法操作。其中Eclat操作主要完成的功能为:各个分区数据分别与VT做交集操作,各个分区从低维向高维生成频繁集。具体包括以下步骤:
S1、从分发后的分区数据中选择一个作为当前分区数据;
S2、对计算节点中缓存的垂直事务数据库进行扫描,得到多个事务,所述垂直事务数据库由事务组成;
S3、从得到的多个事务中选择一个作为当前事务;
S4、判断当前事务是否属于当前分区数据,若是,则执行步骤S5;反之,则从得到的多个事务中选择下一个作为当前事务并执行步骤S4;
S5、判断属于当前分区数据的事务是否满足设定的最小支持度要求,若是,则将属于当前分区数据的事务存入前缀树及当前分区数据对应的频繁集并执行步骤S6;反之,则直接执行步骤S6;
S6、将计算节点中缓存的垂直事务数据库与前缀树进行交运算;
S7、判断交运算后的事务是否满足设定的最小支持度要求,若是,则将交运算后的事务存入后缀树并执行步骤S8;反之,则直接执行步骤S8;
S8、判断前缀树是否为空,若是,则从得到的多个事务中选择下一个事务作为当前事务并返回步骤S4;反之,则执行步骤S9;
S9、判断后缀树是否为空,若是,则输出当前分区数据对应的频繁集并执行步骤S10;反之,则将后缀树作为垂直事务数据库并返回步骤S2,直至后缀树为空;
S10、从分发后的分区数据中选择下一个分区数据作为当前分区数据并返回步骤S2,直至输出对应于分发后的所有分区数据的频繁集。
例如:扫描垂直事务数据库后得到的其中一个事务为{1:(1,3)},将该记录与垂直事务数据库做交集,得到{1:(1,3,9)}和{1:(1,3,5,9)}与其有交集,且交集后的TidSet长度大于最小支持度长度,且这两个记录属于当前分区数据,则将这两个事务存入后缀树用于下一次迭代,剔除垂直事务数据库中其他的跟事务{1:(1,3)}没有交集的事务。
以上步骤三可统称为分区操作,指的是基于RDD中的分区进行并行计算,而非基于记录。基于分区对数据进行操作可以避免为每个数据元素进行重复的处理,例如打开数据库连接或创建随机数生成器等操作。Spark提供了基于分区的map和foreach操作,使代码只针对RDD的每个分区而不是每个元素运行一次,在涉及shuffle操作的任务中能有效减少shuffle的连接数,提高运行效率。所以,在固定分区资源配置的情况下,根据具体问题场景,适当减少分区数目,可以有效减少shuffle操作的连接数目,相应地减少了因shufflewrite步骤导致的中间文件生成数目和因shuffle read步骤导致的网络连接访问数目,从而提高本发明基于Spark的Eclat并行化方法的运行效率。另外,本发明使用前缀树的方案,有效减少了Eclat算法生成的候选集数目,提高了运行效率;同时,本发明通过前缀树递归调用Eclat算法,生成对应前缀树所表示项集的更高维度的项集。参照图2,本发明的每个分区通过利用前缀树临时存储的候选项集,输出多个满足最小支持度的频繁集。
在并行分区计算过程中,如果存在DiffSet比TidSet长度要小的情况,可以考虑使用DiffSet代替TidSet进行支持度的计算和比较,以此减少计算量。
本发明在实现Eclat并行化的过程中,基于现有硬件资源,还做了增大分区、对事务总数分批次操作、使用广播变量等操作,以此降低计算开销以及内存开销。
步骤四:将对应于分发后的每个分区数据的频繁集进行合并,输出满足最小支持度的频繁集。
把分区操作产生的所有频繁集汇集到主节点,此时主节点存储的频繁集即是满足最小支持度的频繁集,将其进行输出。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (6)
1.一种基于Spark的Eclat并行化方法,其特征在于:包括以下步骤:
对事务数据库进行预处理,生成垂直事务数据库;
将垂直事务数据库缓存至各个计算节点;
对垂直事务数据库进行分发计算操作,得到多个频繁集;
对多个频繁集进行合并操作,输出满足最小支持度的频繁集;
所述对垂直事务数据库进行分发计算操作,得到多个频繁集这一步骤,包括以下步骤:
将集群的每个计算节点划分为一个或多个分区;
将垂直事务数据库分发至划分的所有分区;
将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的所有分区数据的频繁集;
所述将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的每个分区数据的频繁集这一步骤,包括以下步骤:
S1、从分发后的分区数据中选择一个作为当前分区数据;
S2、对计算节点中缓存的垂直事务数据库进行扫描,得到多个事务,所述垂直事务数据库由事务组成;
S3、从得到的多个事务中选择一个作为当前事务;
S4、判断当前事务是否属于当前分区数据,若是,则执行步骤S5;反之,则从得到的多个事务中选择下一个作为当前事务并执行步骤S4;
S5、判断属于当前分区数据的事务是否满足设定的最小支持度要求,若是,则将属于当前分区数据的事务存入前缀树及当前分区数据对应的频繁集并执行步骤S6;反之,则直接执行步骤S6;
S6、将计算节点中缓存的垂直事务数据库与前缀树进行交运算;
S7、判断交运算后的事务是否满足设定的最小支持度要求,若是,则将交运算后的事务存入后缀树并执行步骤S8;反之,则直接执行步骤S8;
S8、判断前缀树是否为空,若是,则从得到的多个事务中选择下一个事务作为当前事务并返回步骤S4;反之,则执行步骤S9;
S9、判断后缀树是否为空,若是,则输出当前分区数据对应的频繁集并执行步骤S10;反之,则将后缀树作为垂直事务数据库并返回步骤S2,直至后缀树为空;
S10、从分发后的分区数据中选择下一个分区数据作为当前分区数据并返回步骤S2,直至输出对应于分发后的所有分区数据的频繁集。
2.根据权利要求1所述的一种基于Spark的Eclat并行化方法,其特征在于:所述对事务数据库进行预处理,生成垂直事务数据库这一步骤,包括以下步骤:
扫描事务数据库的所有项目;
根据扫描的项目对事务数据库的每一条事务进行扫描,生成垂直事务数据库;
根据垂直事务数据库计算频繁集。
3.根据权利要求1所述的一种基于Spark的Eclat并行化方法,其特征在于:所述将垂直事务数据库缓存至各个计算节点这一步骤,具体为:
通过广播的方式将垂直事务数据库缓存到集群的各个计算节点。
4.根据权利要求1所述的一种基于Spark的Eclat并行化方法,其特征在于:所述对多个频繁集进行合并操作,输出满足最小支持度的频繁集这一步骤,具体为:将对应于分发后的所有分区数据的频繁集进行合并,输出满足最小支持度的频繁集。
5.一种基于Spark的Eclat并行化系统,其特征在于:包括:
获取模块,用于对事务数据库进行预处理,生成垂直事务数据库;
缓存模块,用于将垂直事务数据库缓存至各个计算节点;
分发模块,用于对垂直事务数据库进行分发计算操作,得到多个频繁集;
合并模块,用于对多个频繁集进行合并操作,输出满足最小支持度的频繁集;
所述分发模块,包括:
划分单元,用于将集群的每个计算节点划分为一个或多个分区;
分发单元,用于将垂直事务数据库分发至划分的所有分区;
交集运算单元,用于将分发后的每个分区数据分别与计算节点中缓存的垂直事务数据库进行交运算,输出对应于分发后的所有分区数据的频繁集;
所述交集运算单元,具体用于S1、从分发后的分区数据中选择一个作为当前分区数据;
S2、对计算节点中缓存的垂直事务数据库进行扫描,得到多个事务,所述垂直事务数据库由事务组成;
S3、从得到的多个事务中选择一个作为当前事务;
S4、判断当前事务是否属于当前分区数据,若是,则执行步骤S5;反之,则从得到的多个事务中选择下一个作为当前事务并执行步骤S4;
S5、判断属于当前分区数据的事务是否满足设定的最小支持度要求,若是,则将属于当前分区数据的事务存入前缀树及当前分区数据对应的频繁集并执行步骤S6;反之,则直接执行步骤S6;
S6、将计算节点中缓存的垂直事务数据库与前缀树进行交运算;
S7、判断交运算后的事务是否满足设定的最小支持度要求,若是,则将交运算后的事务存入后缀树并执行步骤S8;反之,则直接执行步骤S8;
S8、判断前缀树是否为空,若是,则从得到的多个事务中选择下一个事务作为当前事务并返回步骤S4;反之,则执行步骤S9;
S9、判断后缀树是否为空,若是,则输出当前分区数据对应的频繁集并执行步骤S10;反之,则将后缀树作为垂直事务数据库并返回步骤S2,直至后缀树为空;
S10、从分发后的分区数据中选择下一个分区数据作为当前分区数据并返回步骤S2,直至输出对应于分发后的所有分区数据的频繁集。
6.根据权利要求5所述的一种基于Spark的Eclat并行化系统,其特征在于:所述获取模块,包括:
项目扫描单元,用于扫描事务数据库的所有项目;
事务扫描单元,用于根据扫描的项目对事务数据库的每一条事务进行扫描,生成垂直事务数据库;
计算单元,用于根据垂直事务数据库计算频繁集。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710888436.2A CN108334532B (zh) | 2017-09-27 | 2017-09-27 | 一种基于Spark的Eclat并行化方法、系统及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710888436.2A CN108334532B (zh) | 2017-09-27 | 2017-09-27 | 一种基于Spark的Eclat并行化方法、系统及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108334532A CN108334532A (zh) | 2018-07-27 |
CN108334532B true CN108334532B (zh) | 2021-08-03 |
Family
ID=62922458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710888436.2A Active CN108334532B (zh) | 2017-09-27 | 2017-09-27 | 一种基于Spark的Eclat并行化方法、系统及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108334532B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213751B (zh) * | 2018-08-06 | 2021-11-23 | 北京所问数据科技有限公司 | 一种基于Spark平台的Oracle数据库并行迁移方法 |
CN110825786A (zh) * | 2019-11-06 | 2020-02-21 | 哈尔滨理工大学 | 一种基于Spark的大数据关联规则挖掘方法 |
CN112905854A (zh) * | 2021-03-05 | 2021-06-04 | 北京中经惠众科技有限公司 | 数据处理方法、装置、计算设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239501A (zh) * | 2014-09-10 | 2014-12-24 | 中国电子科技集团公司第二十八研究所 | 一种基于Spark的海量视频语义标注方法 |
CN104954453A (zh) * | 2015-06-02 | 2015-09-30 | 浙江工业大学 | 基于云计算的数据挖掘rest服务平台 |
CN106021412A (zh) * | 2016-05-13 | 2016-10-12 | 上海市计算技术研究所 | 一种面向大规模过车数据的伴随车辆识别方法 |
CN107122443A (zh) * | 2017-04-24 | 2017-09-01 | 中国科学院软件研究所 | 一种基于Spark SQL的分布式全文检索系统及方法 |
-
2017
- 2017-09-27 CN CN201710888436.2A patent/CN108334532B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104239501A (zh) * | 2014-09-10 | 2014-12-24 | 中国电子科技集团公司第二十八研究所 | 一种基于Spark的海量视频语义标注方法 |
CN104954453A (zh) * | 2015-06-02 | 2015-09-30 | 浙江工业大学 | 基于云计算的数据挖掘rest服务平台 |
CN106021412A (zh) * | 2016-05-13 | 2016-10-12 | 上海市计算技术研究所 | 一种面向大规模过车数据的伴随车辆识别方法 |
CN107122443A (zh) * | 2017-04-24 | 2017-09-01 | 中国科学院软件研究所 | 一种基于Spark SQL的分布式全文检索系统及方法 |
Non-Patent Citations (2)
Title |
---|
基于 Spark 的并行 Eclat 算法实现;何海等;《中国科技论文在线》;20161219;第1-6页 * |
并行挖掘频繁项目集新算法———MREclat;章志刚等;《计算机应用》;20140810;第2175-2178页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108334532A (zh) | 2018-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ramírez-Gallego et al. | An information theory-based feature selection framework for big data under apache spark | |
Ramírez‐Gallego et al. | Fast‐mRMR: Fast minimum redundancy maximum relevance algorithm for high‐dimensional big data | |
Yagoubi et al. | Dpisax: Massively distributed partitioned isax | |
US20140351239A1 (en) | Hardware acceleration for query operators | |
US8229916B2 (en) | Method for massively parallel multi-core text indexing | |
CN104820708B (zh) | 一种基于云计算平台的大数据聚类方法和装置 | |
CN104809244B (zh) | 一种大数据环境下的数据挖掘方法和装置 | |
CN111159184B (zh) | 元数据追溯方法、装置及服务器 | |
CN108334532B (zh) | 一种基于Spark的Eclat并行化方法、系统及装置 | |
CN107341210B (zh) | Hadoop平台下的C-DBSCAN-K聚类算法 | |
Wehr et al. | Parallel kd-tree construction on the gpu with an adaptive split and sort strategy | |
Yabuta et al. | Relational joins on GPUs: A closer look | |
CN108140022B (zh) | 数据查询方法和数据库系统 | |
Han et al. | Distme: A fast and elastic distributed matrix computation engine using gpus | |
CN103902582A (zh) | 一种减少数据仓库数据冗余的方法和装置 | |
Jørgensen et al. | GPU-FAST-PROCLUS: a fast GPU-parallelized approach to projected clustering | |
CN108319604B (zh) | 一种hive中大小表关联的优化方法 | |
CN107562943B (zh) | 一种数据计算的方法及系统 | |
CN107807952B (zh) | 一种基于Spark的Apriori并行化方法、系统及装置 | |
Kharinov | Adaptive dichotomous image segmentation toolkit | |
CN110175198B (zh) | 基于MapReduce和数组的频繁项集挖掘方法和装置 | |
CN112487111A (zh) | 基于kv数据库的数据表关联方法及装置 | |
Lohar et al. | Content Based Image Retrieval System over Hadoop Using MapReduce | |
Pokhrel et al. | Design of fast and scalable clustering algorithm on spark | |
Zou et al. | AMR-aware in situ indexing and scalable querying |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |