핀아의 저장소 ( •̀ ω •́ )✧
01_04. Cache & Persist 본문
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