我正在使用以下代码在FP Growth算法中生成关联规则。
model.generateAssociationRules(minConfidence).collect().foreach { rule =>
println(
rule.antecedent.mkString("[", ",", "]")
+ " => " + rule.consequent .mkString("[", ",", "]")
+ ", " + rule.confidence)
}
但是每当我试图在拥有1亿条记录的大数据表上运行该算法时,它就会因java堆空间错误而失败。
使用collect()方法在大数据集上执行FP增长算法的替代方法是什么?
我正在使用带有scala 2.10的spark 1.6.2
解决方案代码
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 }
})
答案 0 :(得分:-1)
尝试增加驱动程序内存(如果适用)。如果你在纱线上运行你的应用程序那么最好根据容器内存为驱动程序配置内存哪个驱动程序堆内存+内存占用(堆内存的15%)=(应该是)纱线容器内存