PairRDD
- key-value 쌍 또는 key-value 튜플로 구성된 RDD.
- Pair RDD 에서만 사용할 수 있는 API도 있음.
sample, takeSample, take
- RDD에서 랜덤으로 샘플링하는 API. 인자에 따라 복원, 비복원 추출 가능
- ※ take 는 파티션을 하나씩 처리해 연산이 분산되지 않으므로 빠르게 처리하고 싶다면 요소 개수를 줄인 후(메모리 초과 안하도록) collect 를 사용하는 것이 좋음.
lookup(key)
- 단일 key로 value 찾기
- ※ 결과를 드라이버로 전송하므로, 메모리 부족하지 않은지 확인이 필요함.
sumApprox, meanApprox
- 제한 시간 내 근사 합계/평균을 계산
- Double 타입 RDD 에서만 사용 가능함.
key, value 확인
- testRDD.keys -> key 목록
- testRDD.values -> value 목록
- 또는 testRDD.map(._1), testRDD.map(._2) 호출해도 동일한 동작
- testRDD.keys.distict() -> 중복 제거된 key 목록
- testRDD.keys.distict().count() -> 중복 제거된 key 전체 개수
testRDD.countByKey()
mapValue(...)
- key 변경 없이 PairRDD의 값만 변경.
reduceByKey(..) ★★★
- 각 key의 모든 value을 동일한 타입의 단일 value으로 변경
- value 를 하나로 병합하는 merge 함수 전달 필요
- 각 키별로 value가 하나만 남을 때까지 merge 함수가 호출됨
foldByKey(..)
- reduceByKey 와 비슷.
- zeroValue (항등원)을 추가로 받아서 merge 첫 연산에 사용됨
- ※ RDD 연산이 병렬이므로 zeroValue가 여러번 쓰일 수 있음
aggregateByKey(..)
- zeroValue 값을 받아 RDD를 병합.
- ※ value 타입을 바꿀 수 있음. 그 외에는 reducyByKey와 유사.
distinct()
countByKey()
- 각 key의 출현 횟수를 나타냄
- ex) countByKey().sortBy(_._2).last
- -> 값이 가장 큰 행을 가져옴 (값으로 sort하였으므로)