在Spark中循环。模拟

时间:2017-02-15 17:19:28

标签: java loops apache-spark tree simulation

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

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

现在我看到了如何解决这个问题的几个选项:

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

  1. 累积器//安全吗?
  2. 调用organismRdd.size //性能怎么样?
  3. 模拟我可以使用的过程:

    1. flatMap with organism.nextEpoch()调用返回有机体迭代器
    2. 我可以使用forEach但是在这种情况下我需要在Organism中实现一些逻辑来保持所有" child"一些树王中的节点
    3. 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
      }
      

1 个答案:

答案 0 :(得分:0)

对于停止条件,您可以使用rdd.count()。 这实际上是必要的,因为只是调用flatMap并不执行任何操作,因为Spark rdd转换被懒惰地评估。 您还希望在每一步之后{rd} .cache()以避免重新计算。

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