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

01_07. Key-Value RDD Operations & Joins 본문

Big Data/Engineering

01_07. Key-Value RDD Operations & Joins

_핀아_ 2023. 5. 14. 02:15

Key-Value RDD에 적용할 수 있는 Transformation & Actions

Transformation

  • groupByKey
  • reduceByKey
  • mapValues
  • keys
  • join (+ leftOuterJoin, rightOuterJoin)

Actions

  • countByKey

1️⃣ groupByKey

  • groupBy를 하게되면 rdd 내의 값이 주어지는 함수를 기준으로 그룹핑이 되어 나눠진다.
  • groupByKey를 하면 무엇을 기준으로 할지(키를 기준으로 그룹핑함) 명확해서 함수를 따로 넣어주지 않아도 된다.

[groupBy 예제]

[groupByKey 예제]

key를 기준으로 value값을 group을 지어줌

  • groupByKey() 매개변수를 넣어주면 파티션 개수를 정할 수 있다.

2️⃣ reduceByKey

  • 개념적으로는 groupByKey+reduction
  • 하지만 groupByKey보다 훨씬 빠르다.

3️⃣ mapValues

  • 함수를 value에만 적용한다.
  • mapValues는 각 요소당 value를 몇개씩 가지고 있는지를 나타낸다.
  • 파티션과 키는 그대로 둔다는 장점이 있다.
    • 파티션과 키를 왔다갔다 하려면 네트워크 코스트가 크기 때문에

4️⃣ countByKey

  • 각 키가 가진 요소들을 센다.

5️⃣ Keys()

  • Transformation
  • 모든 Key를 가진 RDD를 생성
m = sc.parallelize([(1, 2), (3, 4)]).keys()
m.collect()

# [1, 3]

6️⃣ Joins()

  • Transformation
  • 여러개의 RDD를 합치는데 사용
  • 대표적으로 두 가지의 Join 방식이 존재
    • Inner Join (join)
    • Outer Join (left outer, right outer)

Inner Join

  • 서로 연관된 데이터만 가져온다.

Outer Join

  • 한쪽에는 데이터가 있고 다른쪽에 없는 경우, 데이터가 있는 족의 데이터를 출력
    • leftOuterJoin : 왼쪽에 있는 데이터를 모두 출력
    • rightOuterJoin : 오른쪽에 있는 데이터를 모두 출력

          → 둘 다 반대편에 데이터가 없는 경우 None

Inner Join vs Outer Join

데이터 예시

  • Inner Join 결과

 

  • leftOuterJoin 결과

  • rightOuterJoin 결과

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

02_01. Structured vs Unstructured Data  (0) 2023.05.14
01_08. Shuffling & Partitioning  (0) 2023.05.14
01_06. Reduction Operations  (0) 2023.05.13
01_05. Cluster Topology  (1) 2023.05.13
01_04. Cache & Persist  (0) 2023.05.13
Comments