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

01_06. Reduction Operations 본문

Big Data/Engineering

01_06. Reduction Operations

_핀아_ 2023. 5. 13. 03:09

Reduction

  • 요소들을 모아서 하나로 합치는 작업
  • 많은 Spark의 연산들이 reduction이다.

✅ Parallel Transformations

  • 주로 변형을 적용시키는 작업들
  • map, flatMap, filter

 그렇다면 Action은 어떻게 분산된 환경에서 작동할까?

  • 대부분의 Action은 Reduction이다.
    • Reduction: 근접하는 요소들을 모아서 하나의 결과로 만드는 일
  • 파일 저장, collect()등과 같이 Reduction이 아닌 액션도 있다.

병렬처리

  • 병렬처리 하려면 두개의 요소를 모아서 하나로 만들 수 있어야 한다.

  • 하지만, 파티션마다 독립적으로 있지 않고 파티션마다 의존적이면 병렬처리 불가능하다.

대표적인 Reduction Actions

  • Reduce
  • Fold
  • GroupBy
  • Aggregate

1️⃣ Reduce

  • RDD.reduce(<function>)
  • 사용자의 데이터 값을 하나로 만들어준다.
from operator import add
sc.parallelize([1, 2, 3, 4, 5]).reduce(add) # 15
  • 하지만 파티션에 따라 결과 값이 달라지게 되므로 분산된 파티션들의 연산과 합치는 부분을 나눠서 생각해야 한다.

  • 하지만 파티션이 어떻게 나뉠지 프로그래머가 정확하게 알기 어려우므로 법칙을 기억해야 한다.
    • 교환법칙 (a*b=b*a)
    • 결합법칙 (a*b)*c=a*(b*c)

2️⃣ Fold

  • RDD.fold(zeroValue, <function>)
from operator import add
sc.parallelize([1, 2, 3, 4, 5]).fold(0, add) # 15
  • reduce와 똑같은 기능을 하지만 다른점은 zerovalue가 추가된다.
  • zerovalue란 각 파티션에서 누적할 시작값을 뜻한다.

Fold 내부
예시

3️⃣ GroupBy

  • RDD.groupBy(<기준 함수>)
rdd = sc.parallelize([1, 1, 2, 3, 5, 8])
result = rdd.groupBy(lambda x: x % 2).collect()
sorted([x, sorted(y)) for (x, y) in result]) 
# [(0, [2, 8]), (1, [1, 1, 3, 5])]
  • RDD 내의 데이터를 기준에 따라 여러개의 그룹으로 나눠주는 역할을 한다.

4️⃣ Aggregate

  • RDD 데이터 타입과 Action 결과 타입이 다를 경우 사용
  • 파티션 단위의 연산 결과를 합치는 과정을 거친다.
  • RDD.aggregate(zeroValue, seqOp, combOp)
    • zeroValue: 각 파티션에선 누적할 시작 값
    • seqOp: 타입 변경 함수
    • combOp: 합치는 함수
  • 많이 쓰이는 reduction action
  • 대부분의 데이터 작업은 크고 복잡한 데이터 타입 -> 정제된 데이터

예시

Key-Value RDD Reduction

  • 배운것 외에도 여러가지 Operation이 존재
  • Key-Value RDD
    • groupByKey
    • reduceByKey

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

01_08. Shuffling & Partitioning  (0) 2023.05.14
01_07. Key-Value RDD Operations & Joins  (0) 2023.05.14
01_05. Cluster Topology  (1) 2023.05.13
01_04. Cache & Persist  (0) 2023.05.13
01_03. RDD Transformations and Actions  (2) 2023.05.13
Comments