【问题标题】:Loop in Spark. Simulation在 Spark 中循环。模拟
【发布时间】:2017-02-15 17:19:28
【问题描述】:

是否可以使用 spark 解决模拟问题? 例如: 我需要模拟一些有机体的生死过程。停止条件:(population = 0 || population > X) 例如,其中 X 为 1,000,000,000。

是否可以在某种条件下使用循环?如果“是”,实现此循环的最佳方法是什么。如果“否”是否有任何其他机制来提供停止条件?

现在我看到了几个解决这个问题的方法:

要控制停止条件,我可以使用:

  1. 蓄能器 // 安全吗?
  2. 调用organismRdd.size // 性能如何?

要模拟我可以使用的过程:

  1. flatMap 与有机体.nextEpoch() 调用返回有机体迭代器
  2. 我可以使用 forEach,但在这种情况下,我需要在 Organism 中实现一些逻辑,以将所有“子”节点保留在某个树之王中

JAVA伪代码示例:

Accumulator population = new Accumulator();
JavaRDD<Organism> organismRdd = ...// create RDD
while(population = 0 || population > X)
{
    organismRdd = organismRdd.flatMap(organism -> organism.nextEpoch()) // return next epoch organisms iterator
    // update population accumulator
}

【问题讨论】:

  • 这绝对是可能的,但我认为 Spark 不是最好的工具。
  • 这只是示例。真正的问题要复杂得多。一个虚拟机不足以在可接受的时间内解决这个问题。这就是我想使用 Spark 的原因。我想试试 spark cluster 来解决我的问题

标签: java loops apache-spark tree simulation


【解决方案1】:

对于停止条件,您可以使用rdd.count()。 这实际上是必要的,因为仅调用 flatMap 不会执行任何操作,因为 Spark rdd 转换是延迟评估的。 你还想在每一步之后.cache()你的 rdd 以避免重新计算。

要生成新的有机体,flatMap 是一个不错的选择。 您也可以根据您的要求使用mapPartitions

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 2012-08-27
    • 2013-05-05
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多