2016-07-05 2 views
0

나는 Spark와 Spark-Cassandra 커넥터를 사용하여 Cassandra로부터 데이터를 수집하고있다. 단일 공유 SparkContext 및 REST API를 사용하여 웹 응용 프로그램을 보유하고 있습니다. Cassandra 테이블을 스파크 메모리에 오랫동안 저장하는 방법은 무엇입니까?

  • 필터링 (불꽃의 변환 순서)
  • 필터 API 호출 파라미터 만 번째 단계 상기 알고리즘
  • 따른 RDD를 제조 준비를

    1. 읽기 산드 테이블 : 처리가 다음의 흐름을 갖는다 모든 호출마다 다릅니다 (API 요청 매개 변수에 따라 다름). API 요청은 병렬 모드 (요청 당 스레드)에서 실행됩니다. 테이블의 데이터가 매우 동적이지 않고 전체 테이블을 저장하기 위해 필자의 스파크 작업자에게 충분한 메모리가 있습니다. 두 번째 단계 후에 내 RDD를 유지하고 모든 요청에 ​​대해 이미 지속되는 RDD 만 유지하려고합니다. 또한이 RDD를 주기적으로 업데이트하고 싶습니다. 그것을 달성하는 가장 좋은 방법은 무엇입니까?

    +0

    내가 원하는 것을 정확하게 이해하고 있는지 확신 할 수 없습니다. RDD를 다른 상황에서 공유해야합니까? 그렇지 않으면 간단한 ['persist'] (http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence)가해야합니다. –

    +0

    @Hawknight 아니오, 문맥은 하나뿐입니다. 내 영속 테이블을 스칼라 객체 안에 저장할 수 있습니까? – Cortwave

    +0

    테이블을 RDD로 변환하면 RDD를 그대로 유지하고 후속 호출에 대해 지속적인 RDD (기술적으로는 작업이 호출 된 후에 만 ​​지속됨) 변수에 대한 참조를 유지할 수 있습니다. –

    답변

    1

    2 단계 후 persist을 RDD에서 호출 할 수 있습니다. 첫 번째 작업이 호출되면 RDD가 계산되고 캐시됩니다. 데이터를 새로 고침하려면 unpersist으로 전화하십시오. 그러면 Spark에서 이전 캐시를 삭제 한 다음 작업 수행시 새 캐시를 저장합니다. 기본적으로, 당신은 이런 식으로 할 것입니다.

    var data = loadAndFilter() 
    while (!stop) { 
        data.persist() 
        // Do step 3 
    
        // Drop the old cache 
        data.unpersist(false) 
        // Load the fresh data 
        data = loadAndFilter() 
    } 
    
    관련 문제