Algorithm 在大数据集上使用collect()实现spark中的FP增长
我使用下面的代码在FP Growth算法中生成关联规则Algorithm 在大数据集上使用collect()实现spark中的FP增长,algorithm,scala,apache-spark,apache-spark-mllib,Algorithm,Scala,Apache Spark,Apache Spark Mllib,我使用下面的代码在FP Growth算法中生成关联规则 model.generateAssociationRules(minConfidence).collect().foreach { rule => println( rule.antecedent.mkString("[", ",", "]") + " => " + rule.consequent .mkString("[", ",", "]") + ", " + rule.confidence) } 但是,每当我试图
model.generateAssociationRules(minConfidence).collect().foreach { rule =>
println(
rule.antecedent.mkString("[", ",", "]")
+ " => " + rule.consequent .mkString("[", ",", "]")
+ ", " + rule.confidence)
}
但是,每当我试图在一个有1亿条记录的大数据表上运行该算法时,它都会因java堆空间错误而失败
使用collect()方法在大数据集上执行FP growth算法的替代方法是什么
我正在使用spark 1.6.2和scala 2.10
解决方案代码
val parts1 = model.freqItemsets.partitions
parts1.map(p => {
val idx1 = p.index
val partRdd1 = model.freqItemsets.mapPartitionsWithIndex {
case(index:Int,value:Iterator[FPGrowth.FreqItemset[String]]) =>
if (index == idx1) value else Iterator()}
val dataPartitioned = partRdd1.collect().foreach{itemset =>
MasterMap1(itemset.items.mkString(",").replace(" ","")) = (itemset.freq / size).toString }
})
如果适用,尝试增加驱动程序内存。如果你在Thread上运行你的应用程序,那么最好根据容器内存配置驱动程序的内存,哪个驱动程序堆内存+头上内存(堆内存的15%)=(应该是)Thread容器内存我能够使用另一篇文章中提供的建议执行我的代码: