【问题标题】:Using collect() for FP Growth in spark on large datasets [duplicate]使用collect()在大型数据集上的火花中进行FP增长[重复]
【发布时间】: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 }
  })

【问题讨论】:

标签: algorithm scala apache-spark apache-spark-mllib


【解决方案1】:

如果适用,请尝试增加驱动程序内存。如果您在 yarn 上运行您的应用程序,那么最好根据容器内存为驱动程序配置内存,即驱动程序堆内存 + 内存开销(堆内存的 15%)=(应该是)纱线容器内存

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多