핀아의 저장소 ( •̀ ω •́ )✧
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