cache() = persist(MEMORY_ONLY)
동일한 RDD에 action이 여러번 일어나게 되면(RDD를 재사용하게 되면) lineage에 기록된 연산들을 여러번 진행하게 된다.
이럴 경우 persist()를 사용하게 되면 해당 지점까지 RDD를 계산한 node들은 partition을 저장하고, action이 일어날 경우 persist()된 지점에서 파티션을 가져오기 때문에 재연산이 일어나지 않는다.
persist()가 일어나는 조건
RDD의 partition이 하나도 persist되지 않았으면 전체가 persist 되지 않은 것이다.
RDD의 partition이 전부 persist되면 RDD 자체가 persist 된 것이고, 해당 RDD의 instance를 다시 만들기위해 연산을 할 필요가 없다.
excecutor가 고장나서 shuffle 실행시 partition persist에 실패하거나, persist선언시 일부 executor가 실패했을 경우, partition이 부분적으로 persist되고, 재연산시 persist에 실패한 partition만 다시 스케줄링되며 executor는 다시 persist에 시도한다.
메모리가 부족할 경우 LRU에 따라 사용한지 가장 오래된 파티션을 제거한다.