【发布时间】:2017-01-20 12:06:56
【问题描述】:
我正在使用以下代码在 FP Growth 算法中生成关联规则。
model.generateAssociationRules(minConfidence).collect().foreach { rule =>
println(
rule.antecedent.mkString("[", ",", "]")
+ " => " + rule.consequent .mkString("[", ",", "]")
+ ", " + rule.confidence)
}
但是每当我尝试在具有 1 亿条记录的大数据表上运行该算法时,它都会因 java 堆空间错误而失败。
使用 collect() 方法在大数据数据集上执行 FP 增长算法的替代方法是什么?
我正在使用 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 }
})
【问题讨论】:
-
我能够使用另一篇文章中提供的建议执行我的代码:stackoverflow.com/questions/21698443/…
标签: algorithm scala apache-spark apache-spark-mllib