spark mllib機器學習之三 FPGrowth
阿新 • • 發佈:2019-01-07
資料格式:
蘋果 梨 香蕉
梨 牛奶 土豆
蘋果 香蕉 狗
狗 土豆
土豆 牛奶 鹽
鹽 梨 狗
蘋果 梨 狗
package com.agm.guanlian
import org.apache.spark.mllib.fpm.FPGrowthimport 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個,相同的前項產生不同的推薦結果是不同的行
//不同的規則可能會產生同一個推薦結果,所以樣本資料過規則的時候需要去重
}
}