一种基于Spark平台的频繁项集挖掘方法技术

技术编号:21184490 阅读:35 留言:0更新日期:2019-05-22 15:05
本发明专利技术涉及一种基于Spark平台的频繁项集挖掘方法,属于数据挖掘技术领域。本发明专利技术基于Spark大数据处理框架,提出了一种新颖的BitMapFIM‑Miner算法,并行化处理数据集,且不需要对数据集进行多次扫描,基于分治的思想,对事务长度大于一定阈值的事务进行分割,然后使用位操作的方法分别计算生成频繁项集,最后将各部分得到的频繁项集进行汇总合并。使用位操作的方法加速了频繁项集的挖掘速度,大大提高了算法的执行效率;通过理论分析和实验验证发现对过长的事务进行分割,在保证结果准确的同时可以高效地得到频繁项集,为频繁项集挖掘方法提供了一种新的思路。

A Frequent Itemset Mining Method Based on Spark Platform

The invention relates to a method for mining frequent itemsets based on Spark platform, which belongs to the technical field of data mining. The invention proposes a novel BitMapFIM_Miner algorithm based on Spark large data processing framework, which parallelizes data sets and does not need to scan data sets many times. Based on the idea of divide and conquer, transactions whose transaction length is longer than a certain threshold are segmented, and then frequent itemsets are computed and generated by bit operation respectively. Finally, frequent itemsets obtained by each part are computed. Make a summary and merge. The method of bit operation accelerates the mining speed of frequent itemsets and greatly improves the execution efficiency of the algorithm. Through theoretical analysis and experimental verification, it is found that the segmentation of overly long transactions can effectively obtain frequent itemsets while ensuring the accuracy of the results, which provides a new idea for frequent itemsets mining method.

【技术实现步骤摘要】
一种基于Spark平台的频繁项集挖掘方法
本专利技术涉及一种基于Spark平台的频繁项集挖掘方法,属于数据挖掘

技术介绍
如何在海量数据集中提高频繁项集的挖掘性能是目前研究的热点。传统的Apriori算法和FP-Growth算法及其改进的算法在处理小规模数据时,都表现出一定的优越性。随着大数据时代的来临,单机版的算法已经不能满足数据处理的时间和空间要求,基于Hadoop和Spark云计算平台的分布式算法不断出现,但是都无法完全移除Apriori算法和FP-Growth算法的弊病,Apriori算法存在多次扫描数据库,生成候选项集过多的问题;当数据量过大时,FP-Growth算法递归的抽取条件模式树时也会花费大量时间。为此,许多移植到Hadoop平台上的算法不断涌现,Hadoop相比Spark存在I/O瓶颈问题,频繁地读入读出数据集会消耗大量不必要的时间。综上,无论是基于Apriori的算法还是基于FP-Growth的算法或者是移植到Hadoop平台上的算法,面对海量数据,都存在频繁项集挖掘时间过长、内存消耗过大的问题,都无法满足快速高效挖掘的性能要求。
技术实现思路
本专利技术要解决的技术问题是为了克服上述现有技术存在的缺陷而提供一种基于Spark平台的频繁项集挖掘方法。本专利技术的技术方案是:一种基于Spark平台的频繁项集挖掘方法,具体步骤为:(1)将原始数据文件从外部存储介质(本地磁盘,HDFS)读取到内存中,根据事务的总数设定最小支持度阈值;(2)对全部数据集中的每条事务包含的不同数据项进行计数,过滤掉计数小于最小支持度阈值的数据项,得到频繁1项集,然后剔除掉每条事务中不属于频繁1项集的数据项,并对每一条事务进行编号;(3)经过步骤(1)、(2)处理过后的数据集,按照事务长度进行划分;(4)对长度小于某个值的所有事务分别利用位操作函数产生其所有可能的数值型项集;(5)将长度小于某个值的所有事务分别产生的数值型项集通过解析函数转化为真实的项集;(6)对长度大于等于某个值的所有事务进行拆分,将拆分后的每条事务的两部分分别使用位操作函数产生数值型项集;(7)将长度大于等于某个值的所有事务的两部分产生的数值型项集分别转化为真实的项集;(8)读取步骤(7)中的数据集,对属于同一事务的两部分产生的真实项集进行自然连接运算,交叉产生项集;(9)合并所有局部产生的频繁项集,得到最终的频繁项集。所述步骤(1)具体包括以下步骤:11)创建SparkConf对象,通过该对象来设置程序运行时所需的参数;12)利用SparkConf对象初始化SparkContext对象,SparkContext对象是应用程序与Spark集群之间通信的接口;13)利用SparkContext对象将数据集文件从HDFS(分布式文件系统)读到内存中并指定分区数量;14)根据事务的总条数计算支持度阈值设I={i1,i2,……,im}是一个由m个数据项构成的集合,T={t1,t2,t3,……,tn}是事务型数据库,每一条事务ti都是由I中不同的项构成的集合,并且满足最小支持度阈值min_sup=ζ*|T|,其中ζ是0到1之间的任意实数,|T|表示数据库中事务的数目。所述步骤(2)具体包括以下步骤:21)将每条事务按照空格进行分割,把每个数据项的初始计数设为1;22)扫描所有数据项,遇到相同的数据项则该数据项的计数加1;23)过滤掉所有计数值小于最小支持度阈值的数据项,得到频繁1项集;24)每条事务与频繁1项集做交集,保留频繁1项集中的数据项;25)对每一条事务编号。所述步骤(3)具体包括以下步骤:31)长度小于某个值(根据不同数据集确定)的所有事务划分为一个RDD(弹性分布式数据集,Spark中特有的数据存储结构),长度大于某个值的所有事务划分为另外一个RDD。所述步骤(4)具体包括以下步骤:41)计算每条事务的长度;42)将事务的长度传入位操作函数中,结果返回一系列的数字集合,每个数字表示一个项集。比如1表示“A”,2表示“B”,3表示“AB”。所述步骤(5)具体包括以下步骤:51)调用解析函数,将每个用数字表示的项集转换为真实的项集。比如1->“A”,2->“B”,3->“AB”;52)将真实的项集进行聚合操作。所述步骤(6)具体包括以下步骤:61)在所有长度大于等于某个值的事务中获取事务长度最大的事务;62)获取长度最大的事务中中间位置的数据项;63)对于所有长度大于等于某个值的事务,以步骤62)获取的数据项为基元素,每一条事务中小于该数据项的数据项划分为一组,大于等于该数据项的数据项划分为另一组;64)将拆分后事务的第一部分的长度传入位操作函数中,计算生成数值型项集;65)将拆分后事务的第二部分的长度传入位操作函数中,计算生成数值型项集。所述步骤(7)具体包括以下步骤:71)对步骤64)产生的数值型项集,调用解析函数,将每个用数字表示的项集转换为真实的项集;72)对步骤71)生成的真实项集做聚合操作;73)对步骤65)产生的数值型项集,调用解析函数,将每个用数字表示的项集转换为真实的项集;74)对步骤73)生成的真实项集做聚合操作。所述步骤(8)具体包括以下步骤:81)将步骤52)、步骤72)、步骤74)生成的项集做并集运算;82)对步骤81)生成的项集进行聚合,过滤掉计数小于最小支持度阈值的项集;83)将步骤72)产生的项集与步骤82)产生的项集做交集运算;84)将步骤74)产生的项集与步骤82)产生的项集做交集运算;85)将步骤83)产生的项集与步骤84)产生的项集做自然连接运算,产生交叉项集。所述步骤(9)具体包括以下步骤:91)聚合步骤85)、步骤81)产生的项集,过滤掉非频繁的项集(支持度计数小于最小支持度阈值),得到最终的频繁项集。本专利技术的有益效果是:本专利技术使用位操作的方法加速了频繁项集的挖掘速度,大大提高了算法的执行效率;通过理论分析和实验验证发现对过长的事务进行分割,在保证结果准确的同时可以高效地得到频繁项集,为频繁项集挖掘方法提供了一种新的思路。附图说明图1是本专利技术Spark工作方式的过程图;图2是本专利技术的流程图。具体实施方式为了使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术进一步地详细描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。如图1所示,Spark通过分配任务的方式,将海量数据分区并将对海量数据的处理任务分配给各个Worker节点,每个Worker节点会启动相应数量的Executor进程来执行Task任务,最后整合各个Worker节点的计算结果得到最终结果。如图2所示,针对一种基于Spark的频繁项集挖掘方法,其特征在于,包括以下步骤:1、将原始数据文件从外部存储介质(本地磁盘,HDFS)读取到内存中,根据事务的总数设定最小支持度阈值。假设表1为原数据集,如下:表1设I={i1,i2,……,im}是一个由m个数据项构成的集合,T={t1,t2,t3,……,tn}是事务数据库,每一条事务ti都是由I中不同的项构成的集合,并且满足最小支持本文档来自技高网...

【技术保护点】
1.一种基于Spark平台的频繁项集挖掘方法,其特征在于:(1)将原始数据文件从外部存储介质读取到内存中,根据事务的总数设定最小支持度阈值;(2)对全部数据集中的每条事务包含的不同数据项进行计数,过滤掉计数小于最小支持度阈值的数据项,得到频繁1项集,然后剔除掉每条事务中不属于频繁1项集的数据项,并对每一条事务进行编号;(3)经过步骤(1)、(2)处理过后的数据集,按照事务长度进行划分;(4)对长度小于某个值的所有事务分别利用位操作函数产生其所有可能的数值型项集;(5)将长度小于某个值的所有事务分别产生的数值型项集通过解析函数转化为真实的项集;(6)对长度大于等于某个值的所有事务进行拆分,将拆分后的每条事务的两部分分别使用位操作函数产生数值型项集;(7)将长度大于等于某个值的所有事务的两部分产生的数值型项集分别转化为真实的项集;(8)读取步骤(7)中的数据集,对属于同一事务的两部分产生的真实项集进行自然连接运算,交叉产生项集;(9)合并所有局部产生的频繁项集,得到最终的频繁项集。

【技术特征摘要】
1.一种基于Spark平台的频繁项集挖掘方法,其特征在于:(1)将原始数据文件从外部存储介质读取到内存中,根据事务的总数设定最小支持度阈值;(2)对全部数据集中的每条事务包含的不同数据项进行计数,过滤掉计数小于最小支持度阈值的数据项,得到频繁1项集,然后剔除掉每条事务中不属于频繁1项集的数据项,并对每一条事务进行编号;(3)经过步骤(1)、(2)处理过后的数据集,按照事务长度进行划分;(4)对长度小于某个值的所有事务分别利用位操作函数产生其所有可能的数值型项集;(5)将长度小于某个值的所有事务分别产生的数值型项集通过解析函数转化为真实的项集;(6)对长度大于等于某个值的所有事务进行拆分,将拆分后的每条事务的两部分分别使用位操作函数产生数值型项集;(7)将长度大于等于某个值的所有事务的两部分产生的数值型项集分别转化为真实的项集;(8)读取步骤(7)中的数据集,对属于同一事务的两部分产生的真实项集进行自然连接运算,交叉产生项集;(9)合并所有局部产生的频繁项集,得到最终的频繁项集。2.根据权利要求1所述的基于Spark平台的频繁项集挖掘方法,其特征在于:所述步骤(1)具体包括以下步骤:11)创建SparkConf对象,通过该对象来设置程序运行时所需的参数;12)利用SparkConf对象初始化SparkContext对象,SparkContext对象是应用程序与Spark集群之间通信的接口;13)利用SparkContext对象将数据集文件从HDFS读到内存中并指定分区数量;14)根据事务的总条数计算支持度阈值设I={i1,i2,……,im}是一个由m个数据项构成的集合,T={t1,t2,t3,……,tn}是事务型数据库,每一条事务ti都是由I中不同的项构成的集合,并且满足最小支持度阈值min_sup=ζ*|T|,其中ζ是0到1之间的任意实数,|T|表示数据库中事务的数目。3.根据权利要求1所述的基于Spark平台的频繁项集挖掘方法,其特征在于:所述步骤(2)具体包括以下步骤:21)将每条事务按照空格进行分割,把每个数据项的初始计数设为1;22)扫描所有数据项,遇到相同的数据项则该数据项的计数加1;23)过滤掉所有计数值小于最小支持度阈值的数据项,得到频繁1项集;24)每条事务与频繁1项集做交集,保留频繁1项集中的数据项;25)对每一条事务编号。4.根据权利要求1所述的基于Spark平台的频繁项集挖掘方法,其特征在于:所述步骤...

【专利技术属性】
技术研发人员:丁家满李海滨
申请(专利权)人:昆明理工大学
类型:发明
国别省市:云南,53

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1