2017-02-15 7 views
0

sparkを使用してシミュレーションの問題を解決することは可能ですか? 例: 私はいくつかの生物の誕生と死のプロセスをシミュレートする必要があります。停止条件:(人口= 0 |人口> X)ここで、Xは1,000,000,000です。スパークのループ。シミュレーション

何らかの条件でループを使用することはできますか? "はい"の場合、このループを実装する最良の方法は何ですか。 "いいえ"の場合、停止条件を提供する他のメカニズムはありますか?私が使用することができます停止条件を制御するには

今私は、この問題を解決するためにどのようにいくつかのオプションを参照してください

  1. アキュムレータ//は、それが安全なのですか?
  2. call organismRdd.size //パフォーマンスはどうですか?

私が使用できるプロセスをシミュレートするには、次の生物が、私はのforEachを使用することができますが、この場合には、私は生物にいくつかのロジックを実装する必要が

  • イテレータ返す

    1. flatMap organism.nextEpochと()の呼び出し

      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 
      } 
      
      :ツリー

    JAVA擬似コードの例のいくつかの王にすべての "子" ノードを維持します

  • +0

    確かに可能ですが、私はスパークがそれを行うのに最適なツールとは思わないでしょう。 –

    +0

    これは単なる例です。実際の問題ははるかに複雑です。そして、1台のVMで許容時間内にこの問題を解決するには十分ではありません。だから私はスパークを使いたいのです。スパーククラスターで問題を解決したい – user2906578

    答えて

    0

    停止条件の場合は、rdd.count()を使用できます。 実際にはflatMapを呼び出すだけでは何も実行されないので、Sparkのrdd変換は遅延評価されるので、これは実際には必要になります。 また、再計算を避けるために、すべての手順の後に.cache()のrddを使用します。

    新しい生物を生成するには、flatMapが適しています。 要件に応じてmapPartitionsを使用することもできます。

    関連する問題