1. 程式人生 > >spark mllib機器學習之三 FPGrowth

spark mllib機器學習之三 FPGrowth

資料格式:

蘋果 梨 香蕉
梨 牛奶 土豆
蘋果 香蕉 狗
狗 土豆
土豆 牛奶 鹽
鹽 梨 狗
蘋果 梨 狗

package com.agm.guanlian

import org.apache.spark.mllib.fpm.FPGrowth
import org.apache.spark.{SparkConf, SparkContext}
import java.io._
import org.apache.log4j.{Level, Logger}


object FPGrowth {
  def main(args:Array[String]){
    
     Logger.getLogger("org").setLevel(Level.ERROR)
   
    
    val conf = new SparkConf().setAppName("FPGrowthTest").setMaster("local").set("spark.sql.warehouse.dir","E:/ideaWorkspace/ScalaSparkMl/spark-warehouse")
    val sc = new SparkContext(conf)
    //設定引數
    //最小支援度
    val minSupport=0.2
    //最小置信度
    val minConfidence=0.6
    //資料分割槽
    val numPartitions=2


    //取出資料
    val data = sc.textFile("F:\\testData\\spark\\FPGrowth.txt")


    //把資料通過空格分割
    val transactions=data.map(x=>x.split(" "))
    transactions.cache()
    //建立一個FPGrowth的演算法實列
    val fpg = new FPGrowth()
    //設定訓練時候的最小支援度和資料分割槽
    fpg.setMinSupport(minSupport)
    fpg.setNumPartitions(numPartitions)


    //把資料帶入演算法中
    val model = fpg.run(transactions)


    //檢視所有的頻繁項集,並且列出它出現的次數
    model.freqItemsets.collect().foreach(itemset=>{
     println( itemset.items.mkString("[", ",", "]")+","+itemset.freq)
    })


    //通過置信度篩選出推薦規則則
    //antecedent表示前項
    //consequent表示後項
    //confidence表示規則的置信度
    //這裡可以把規則寫入到Mysql資料庫中,以後使用來做推薦
    //如果規則過多就把規則寫入redis,這裡就可以直接從記憶體中讀取了,我選擇的方式是寫入Mysql,然後再把推薦清單寫入redis
    model.generateAssociationRules(minConfidence).collect().foreach(rule=>{
       println(rule.antecedent.mkString(",")+"-->"+
        rule.consequent.mkString(",")+"-->"+ rule.confidence)
    })
    //檢視規則生成的數量
    println(model.generateAssociationRules(minConfidence).collect().length)


    //並且所有的規則產生的推薦,後項只有1個,相同的前項產生不同的推薦結果是不同的行
    //不同的規則可能會產生同一個推薦結果,所以樣本資料過規則的時候需要去重


  }


}