基于spark的pfpgrowth并行算法优化实现

基于spark的pfpgrowth并行算法优化实现

ID:9706996

大小:57.50 KB

页数:8页

时间:2018-05-05

基于spark的pfpgrowth并行算法优化实现_第1页
基于spark的pfpgrowth并行算法优化实现_第2页
基于spark的pfpgrowth并行算法优化实现_第3页
基于spark的pfpgrowth并行算法优化实现_第4页
基于spark的pfpgrowth并行算法优化实现_第5页
资源描述:

《基于spark的pfpgrowth并行算法优化实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、基于Spark的PFPGrowth并行算法优化实现  基于Spark的PFPGroation(T)和Action(A)。T操作的输入类型是RDD,输出类型也是RDD;A操作的输入类型是RDD,输出类型是一个值或者一个数组。由于对RDD的操作是惰性的,T操作只是表明该操作被请求,而没有对具体的数据进行操作,只有出现了一个A操作以后,数据的读写请求才能真实的在集群上触发。这样的好处就是可以减少T操作的所要存储的中间数据。根据这个特性在编写程序的过程中就需要减少A操作的频率。文献[10]就是在Spark平台实现了频繁项挖掘Apriori算法的并行化,其实验结果也说明了在S

2、park平台上实现并行化算法具有很高的效率。  1.2FP?Growth算法介绍  FP?Growth算法将整个数据库的事务进行压缩,该算法不会产生候选项集,采用一种频繁项集增长的方式来进行数据挖掘。该算法从逻辑上可以分为两个部分:第一部分是建树的过程,即把数据库转化为一棵FP?Tree,第二部分就是挖掘的过程,即递归的挖掘这棵FP?Tree,具体的步骤如下所述:  1.2.1建树  (1)第一次扫描整个数据库,计算出所有项所出现的次数,找出满足支持度计数的项,并把这些项按支持度计数降序排列,这就是频繁?1项集,记为L。  (2)第二次扫描数据库,并在每条事务中的项

3、中先删除不满足支持度计数的项,以L中的顺序为大小规则进行降序排列记为d_list。  (3)建立一个根节点为null的树。  (4)建立一个表存储节点的信息记为Tab,包括两个属性(项,一个指向节点的指针)。  (5)将d_list中的每条处理好的事务依次插入这棵树中,构建出该树的一条路径,在插入的过程中,同时用Tab的指针指向对应项的节点。并将每个节点的计数增加1。  1.2.2挖掘  (1)从Tab表的尾部的项开始向上遍历FP?Tree,每次遍历得到该项的条件模式基,再根据第一部分将其条件模式基转化为一棵新的FP?Tree以及一个存储表,项与项的计数记为后缀模式

4、。  (2)如果这棵新的FP?Tree为单分支的结构,就对路径上的项进行组合,并与后缀模式相结合;如果不是单分支的结构就跳转到步骤(1)并合并后缀模式,直到挖掘到根节点(null)。  FP?Growth算法具体过程如图1所示。  2IPFP?Growth算法的并行化实现  2.1IPFP?Growth算法在Spark上的实现  本文的IPFP?Growth算法建立在PFP?Growth算法的基础之上,采用Scala语言编写,IPFP?Growth算法在Spark上的并行实现整个过程分为4个步骤:  (1)读取原始数据库将其按频繁?1项集顺序递减排列;  (2)根据

5、文件大小确定分组个数,按照分组规则将其分为若干组;[1][2][3]>  (3)对每个组分别进行频繁项挖掘;  (4)将每个组的结果进行合并。  算法的整体逻辑图如图2所示。由于原始数据是存储在HDFS中的,超出一个Block大小文件将自动被切分为许多Block,原始分区数s等于文件的总大小/每个Block块的大小+1。  第(1)步中,先从HDFS获取数据库信息转化为初始RDD,利用RDD的faltMap操作将原本的每条事务合并成一个List集合并通过cache操作保存在内存中以便后期的重用,这样只需要对HDFS上的数据进行一次访问,而原PFP?Gro)进行map

6、操作,转化为键值对的形式,接着用reduceByKey操作来进行词频统计,并按从大到小的顺序进行排序,根据支持度计数剔除不满足的项,得到频繁?1项集。根据频繁?1项集的数目,对cache过的数据进行HashPatition操作,重新分为P个分区(p≥s),目的是为了增加并行的粒度,采用键值对映射的方式来反映出频繁项之间的大小关系,以此大小关系作为排序规则,用map操作作用在List集合中的每条事务上,同时剔除不满足支持计数的项。  第(2)步中,首先将每条事务进行最小划分,以图1第一条事务为例,{a,b,c,e}经过第(1)步的处理变为{b,a,c},其中划分给c组

7、的序列为{b,a,c},发送给a组的序列为{b,a},发送给b组的序列为{b},以这种最小划分的方式来对List中的每一条事务进行划分。明显可以看出三个不同组的挖掘所用的开销是不同的,接下来对每一个小组的挖掘开销进行估计,按照均衡分组的规则再进一步合并,确保每一组挖掘的开销基本相同,最后将所有的分组用Hash的方法放在均衡放在每个patition中,保证每个patition中的组数相同。  第(3)步中,采用mapPartitions操作分别对每个分区中的的序列采用2.1节中所描述的FP?Gro>t时,各个组的计算量必然不一致,此时并行计算的时间取决于最长

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。