spark关联规则挖掘

该博客介绍了如何使用Spark的mllib库进行关联规则挖掘,主要包括将数据转化为分类变量和应用FPGrowth算法。然而,操作过程中遇到了数据转换为sparse格式(basket格式)的需求,以及因版本问题导致的报错问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用spark进行关联规则挖掘:

1 首先数据全部处理为分类变量

2 使用spark mllib 中的FPGrowth挖掘关联规则


存在问题

1 数据需要处理成sparse格式,也有人称basket格式

2 版本原因会报错:

java.lang.IllegalArgumentException: Can not set 
final scala.collection.mutable.ListBuffer field org.apache.spark.mllib.fpm.FPTree$Summary.nodes to scala.collection.mutable.ArrayBuffer
Serialization trace:
nodes (org.apache.spark.mllib.fpm.FPTree$Summary)
加上conf..set("spark.serializer", "org.apache.spark.serializer.JavaSerializer")即可

具体如下:
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
val conf = new SparkConf()
conf.setAppName("ares_login_FPGrowth").set("spark.serializer", "org.apache.spark.serializer.JavaSerializer")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)

val data= sqlContext.read.parquet(dataPath)


println("total num: " + data.count())

val trainsactions: RDD[Array[String]] = data.rdd.map(row => {
      row.getString(1) + " " +  row.getString(2) + " " +  row.getString(3))
    }).map(_.trim.split("\\s+"))
val minSupp = 0.6
val minConf = 0.8
val partitions = 10
val fpGrowth = new FPGrowth().setMinSupport(minSupp).setNumPartitions(partitions)
val model = fpGrowth.run(trainsactions)

println("frequent itemsets: ")
model.freqItemsets.collect().foreach(itemset =>{
  println(itemset.items.mkString("[",",","]") + "  {" + itemset.freq + "}")
})

println("rules: ")
model.generateAssociationRules(minConf).collect().foreach(rule => {
  println(rule.antecedent.mkString("[", ",", "]") + "=>" +
    rule.consequent.mkString("[", "," ,"]") + "  {" + rule.confidence + "}")
})
println("num of rules: " + model.generateAssociationRules(minConf).collect().length)

sc.stop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值