핀아의 저장소 ( •̀ ω •́ )✧

01_04. Cache & Persist 본문

Big Data/Engineering

01_04. Cache & Persist

_핀아_ 2023. 5. 13. 01:48

https://mydb-lib.tistory.com/entry/0103-RDD-Transformations-and-Actions

 

01_03. RDD Transformations and Actions

Transformations & Actions Transformations 결과값으로 새로운 RDD를 반환 Actions가 실행되기 전까진 실행되지 않는다. 지연 실행(Lazy Execution) Actions 결과값을 연산하여 출력하거나 저장 파이썬 오브젝트나 리

mydb-lib.tistory.com

  • 앞서 Transformation과 Actions 두가지 방식으로 나눈 이유는 메모리를 최대한 활용하기 위해서이다.
    • 디스크, 네트워크 연산을 최소화 할 수 있다.
  • 데이터를 다루는 task는 반복되는 경우가 많다.
    • ex) 머신러닝 학습
  • 아래와 같이 반복하는 경우 비효율이 발생한다.
    • 디스크에 넣었다 뺏다 하는 과정에서 비효율이 발생 (속도 저하)

✅ 지연되는 연산이 유용한 경우

  • 지연되는 연산이 유용한 경우 
    • task -> task로 넘어갈 때 in-memory 방식을 사용하는 경우이다.
    • 하지만 이는 어떤 데이터를 메모리에 남겨야 할지 알아야 가능하다.

  • Transformations는 지연 실행되기 때문에 메모리에 저장해둘 수 있다.
  • 데이터를 메모리에 남겨두고 싶을때 사용할 수 있는 함수가 바로 Cache()와 Persist()이다.

✅ Lazy Evaluations

categoryReviews = filtered_lines.map(parse)

result1 = categoryReviews.take(10)
result2 = categoryReviews.mapValues(lambda x: (x, 1)).collect()
  • categoryReviews는 result1과 result2를 만들면서 2번 만들어진다.
categoryReviews = filtered_lines.map(parse).persist()

result1 = categoryReviews.take(10)
result2 = categoryReviews.mapValues(lambda x: (x, 1)).collect()
  • categoryReviews는 result1과 result2를 만들면서 2번 만들어진다.
  • .persist()를 추가하여 메모리에 저장해두고 쓸 수 있다.
  • 한 번 연산한 다음에 그 결과값을 메모리에 저장해 두고, 다음 연산에 쓸 수 있기 때문에 result1과 result2를 만드는데도 한 번만 연산을 하게 된다.

✅ ex) 회귀 함수

  • cache를 통해 데이터 ("...")를 메모리에 넣어놓고 메모리에서 반복적으로 꺼내와 빠른 처리가 가능하도록 한다.

 Storage Level

Cache() & Persist()

  • Cache()
    • 디폴트 Storage Level 사용
    • RDD: MEMORT_ONLY
    • DataFrame: MEMORY_AND_DISK
  • Persist()
    • Storage Level을 사용자가 원하는대로 지정 가능

'Big Data > Engineering' 카테고리의 다른 글

01_06. Reduction Operations  (0) 2023.05.13
01_05. Cluster Topology  (1) 2023.05.13
01_03. RDD Transformations and Actions  (2) 2023.05.13
01_02. 병렬처리에서 분산처리까지  (0) 2023.05.12
01_01. Spark와 RDD  (0) 2023.05.12
Comments