핀아의 저장소 ( •̀ ω •́ )✧
01_07. Key-Value RDD Operations & Joins 본문
Key-Value RDD에 적용할 수 있는 Transformation & Actions
✅ Transformation
- groupByKey
- reduceByKey
- mapValues
- keys
- join (+ leftOuterJoin, rightOuterJoin)
✅ Actions
- countByKey
1️⃣ groupByKey

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

[groupByKey 예제]

- 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