2017-10-18 1 views
-1

나는 스파크의 카산드라에서로드 된 데이터 세트를 가지고 있습니다. 이 데이터 세트를로드 한 후에는 cassandra에서 일부 항목을 제거 하겠지만 다음 계산을 위해 먼저 내 데이터 집합을 원합니다. 나는 그것을 해결하기 위해 persist(DISK_ONLY)을 사용했지만, 최선의 노력으로 보인다. spark에서 강제로 다시 계산하지 않도록 할 수 있습니까?스파크가 데이터 집합을 다시 계산하지 않도록하려면 어떻게해야합니까?

예 :

val dataset:Dataset[Int] = ??? // something from cassandra 
dataset.persist(StorageLevel.DISK_ONLY) // it's best effort 
dataset.count // = 2n 
dataset.persist(_ % 2 == 0).remove // remove from cassandra 
data.count // = n => I need orginal dataset here 
+0

@mrsrinivas 스파크 캐시와 지속성이 최적화 방법 :

요 난 강력 적어도 분산 파일 시스템처럼 영구 저장에 중간 데이터를 작성하고, 그것을 다시 읽어 보시기 바랍니다 것이다 정확성 을 보장합니다. 그 (것)들에 아무 보증도 없다. –

+0

동의합니다. DAG가 해당 단계를 건너 뛸 것임을 언급하지 않았습니다. 그러나 ** RDD는 모든 단계에서 rdd가 지속되는 경우 호출 될 때마다 다시 계산되지 않습니다. – mrsrinivas

답변

2

스파크 cache이 방법을 사용할 수 없습니다. 최적화이며 가장 보수적 인 사람도 StorageLevels (DISK_ONLY_2) 일지라도 작업자가 실패하거나 폐로하는 경우 데이터가 손실되고 다시 계산 될 수 있습니다.

Checkpoint 신뢰할 수있는 파일 시스템이 더 나은 옵션 일 수 있지만 일부 데이터가 손실 될 수있는 경계 케이스가있을 수 있습니다.

dataset.write.format(...).save("persisted/location") 
... // Remove data from the source 
spark.read.format(...).load("persisted/location") //reading the same again 
관련 문제