是否可以使用spark解决模拟问题? 例如: 我需要模拟一些有机体的生灭过程。停止条件:(人口= 0 ||人口> X)例如,X为1,000,000,000。
是否可以在某种条件下使用循环?如果"是"实现此循环的最佳方法是什么。如果" NO"有没有其他机制来提供停止条件?
现在我看到了如何解决这个问题的几个选项:
为了控制停止条件,我可以使用:
模拟我可以使用的过程:
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
}
答案 0 :(得分:0)
对于停止条件,您可以使用rdd.count()
。
这实际上是必要的,因为只是调用flatMap
并不执行任何操作,因为Spark rdd转换被懒惰地评估。
您还希望在每一步之后{rd} .cache()
以避免重新计算。
要生成新生物,flatMap
是一个不错的选择。
您也可以根据自己的要求使用mapPartitions
。