Algorithm 在大数据集上使用collect()实现spark中的FP增长

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) } 但是,每当我试图

我使用下面的代码在FP Growth算法中生成关联规则

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容器内存

我能够使用另一篇文章中提供的建议执行我的代码: