키-밸류(Key-Value) RDD
- 스트럭쳐(Structured) 데이터를 스파크와 연결하여 사용할 수 있게 해주는 키-밸류 RDD에 대해 알아볼 것이다.
- 이름 그대로 키-밸류 쌍을 갖기 때문에 페어(Pairs) RDD로도 불린다.
- 형태가 NoSQL처럼 생겼기 때문에 간단한 데이터 베이스처럼 다룰 수 있다.
- 싱글 밸류(Sigle Value) RDD는 간단하게 갯수를 세거나 정형 데이터를 다루거나 1차원적인 연산이 가능 했다면, 키-밸류 RDD는 고차원적인 연산이 가능하다.(키를 기준으로 통계를 구하거나, 평균을 구한다는 등)
- 싱글 밸류 RDD: 텍스트에 등장하는 단어 수 세기
- 키-밸류 RDD: 넷플릭스 드라마가 받은 평균 별점
예제
- 지역 ID 별 택시 운행 수
- K: 지역 ID
- V: 운행 수
1 |
|
- 그 외, 드라마 별 별점 수 모아보기, 평균 구하기, 이커머스 사이트에서 상품당 별 평점 구하기 등이 있다.
코드
- 코드상으로는 많이 다르지 않다.
1 |
|
- 단순 값 뿐 아니라 리스트도 값이 될 수 있다.
기능
Reduction
- 키 값을 기준으로 데이터를 묶어서 처리하거나 데이터를 줄이는데 쓰인다.
reduceByKey()
: 키값을 기준으로 테스크를 처리한다.groupByKey()
: 키값을 기준으로 밸류를 묶는다.sortByKey()
: 키값을 기준으로 정렬한다.keys()
: 키 값을 추출한다.values()
: 밸류 값을 추출한다.
1 |
|
- 절차는 주석과 같이 진행된다.
Join
- 데이터 베이스와 많이 닮아있기 때문에 여러개의 RDD를 키 값을 기준으로 붙이는 Join도 가능하다.
join
rightOuterJoin
leftOuterJoin
subtractByKey
Mapping values
- 키 밸류 데이터에서 키를 바꾸지 않는 경우
map()
대신 밸류만 다루는mapValues()
함수를 써주는 것이 좋다. - 그 이유는 스파크 내부에서 파티션을 유지할 수 있어 더욱 효율적이기 때문이다.
mapValues()
flatMapValues()
- 위 함수들은 밸류만 다루는 연산들이지만 RDD에서 키는 유지되기 때문에 더 좋은 성능을 기대할 수 있다.
코드
- 간단한 csv 파일로 키-밸류 RDD를 살펴보자.
1 |
|