2017-02-15 1 views
0

spark를 사용하여 시뮬레이션 문제를 해결할 수 있습니까? 예 : 일부 생물체의 출생 - 죽음 과정을 시뮬레이트해야합니다. 정지 조건 : (모집단 = 0 || 모집단> X) 여기서 X는 1,000,000,000입니다.루프가 스파크입니다. 시뮬레이션

어떤 종류의 조건에서 루프를 사용할 수 있습니까? "예"일 경우이 루프를 구현하는 가장 좋은 방법은 무엇입니까? "중지"조건을 제공하는 다른 메커니즘이 있다면 "아니오"입니까?

정지 조건은 내가 사용할 수있는 제어하려면 :

는 지금은이 문제를 해결하는 방법을 몇 가지 옵션을 볼 수

  1. 배터리 // 그것은 안전합니까?
  2. call organismRdd.size // 성능은 어떻습니까?

내가 사용할 수있는 과정을 시뮬레이션하려면 유기체는가

  • I foreach는 사용할 수 반복자 그러나이 경우 내가 유기체의 일부 로직을 구현해야 반환 organism.nextEpoch() 호출을

    1. flatMap

      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

    이것은 단지 예입니다. 진짜 문제는 훨씬 더 복잡합니다. 그리고 한 VM만으로는 허용되는 시간에이 문제를 해결할 수 없습니다. 그래서 스파크를 사용하고 싶습니다. 스파크 클러스터로 내 문제를 해결하고 싶습니다. – user2906578

    답변

    0

    정지 조건의 경우 rdd.count()을 사용할 수 있습니다. 실제로는 flatMap을 호출하면 Spark rdd 변환이 지연 평가되므로 아무 것도 실행하지 않기 때문에 실제로 필요합니다. 또한 재 계산을 피하기 위해 매 단계마다 .cache()의 rdd를 원합니다.

    새로운 생물체를 생성하려면 flatMap이 좋습니다. 요구 사항에 따라 mapPartitions을 사용할 수도 있습니다.