一 前言
处理一个大数据集,找出其中的强关联规则,本文基于spark使用java语言实现了apriori算法,算法已经通过测试,后边附带一个测试实验及运行结果。
二 apriori算法描述
apriori是一种经典的数据挖掘算法,可以挖掘出数据库中哪些物品经常一起出现,满足最小支持度和最小置信度的的规则为强关联规则。因此,算法需要找出所有的强关联规则,从而为实际提供决策或者预测未来的结果。apriori算法使用逐层搜索的迭代思想,第k频繁项集用于找出第(k+1)频繁项集,依次类推,直到找出所有的频繁项集。最后从已经找出的这些频繁项集中进一步找出所有强关联规则。本文实现的算法主要完成找出所有的频繁项集,这一步也是apriori算法最重要的。
三 算法实现
package org.min.apriori;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFlatMapFunction;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import org.apache.spark.broadcast.Broadcast;
import scala.Tuple2;
import scala.collection.mutable.ArrayBuffer;
/**
*
* @author ShiMin
* @date 2015/10/13
* @description APriori algorithm runs on spark in java.
*
*/
public class FrequentItemset
{
public static int SUPPORT_DEGREE = 4;//the support of APriori algorithm
public static int TRANSACTION_NUM = 25;//the number of transaction
public static String SEPARATOR = " ";//line separator
public static int NOFITEMS = 4;//the number of items in itemSet
@SuppressWarnings("serial")
public static void main(String[] args)
{
Logger.getLogger("org.apache.spark").setLevel(Level.OFF);
args = new String[]{"hdfs://master:9000/data/input/wordcounts.t