一、 实验要求
在 Spark2.3 平台上实现 Apriori 频繁项集挖掘的并行化算法。要求程序利用 Spark 进
行并行计算。
二、算法设计
2.1 设计思路
- 变量定义
- D为数据集,设Lk是k项频繁项集,Ck是k项候选集,每一行数据定义为一笔交易(transaction),交易中的每个商品为项item。
- 支持度: support, 即该项集在数据集D中出现的次数
- 算法流程
- 单机Apriori算法的主要步骤如下:
- 获取输入数据,产生频繁1项集,以及和I作为候选集,扫描数据集D,获取候选集C1的支持度,并找出最小支持度min_sup的元素作为频繁1项集L1.
- 扫描数据集D,获取候选集Ck的支持度,并找出其中满足最小支持度的元素作为频繁k项集Lk
- 通过频繁k项集Lk产生k+1候选集Ck+1
- 通过迭代步骤2和3,直到找不到k+1项集结束
- 单机Apriori算法的主要步骤如下:
并行化设计的思路主要是考虑将对于支持度计数的过程使用wordcount来进行统计。
2.2 并行化算法设计
Apriori算法产生频繁项集有两个特点:第一,它是逐层的,即从频繁1-项集到频繁k-项集;第二,它使用产生-测试的策略来发现频繁项,每次迭代后都由前一次产生的频繁项来产生新的候选项,然后对新产生的候选项集进行支持度计数得到新的频繁项集。根据算法的特点,我们将算法分为两个阶段:
如下