반응형
- RDD 는 크게 변환 과 행동 이라는 두 유형으로 나뉨
- 변환 연산자 : RDD 의 데이터를 조작해 새로운 RDD 를 생성 ( filter, map 함수)
- 행동 연산자 : 연산자를 호출한 프로그램으로 계산결과를 반환하거나 RDD 요소에 특정 작업을 수행하려고 실제 계산을 시작하는 역할을 함 ( count, foreach 함수)
지연 실행
- 매우 중요한 개념
- 행동 연산자를 호풀하기 전까지는 변환 연산자의 계산을 실행하지 않는 것을 의미
- 행동 연산자를 호출했을 때 무슨 연산이 어떤 순서로 실행되어야 할지 알려주는 일종의 설계도
1. map 변환 연산자
- 원본 RDD 의 각 요소를 변환한 후 변환된 요소로 새로운 RDD 를 생성하는 연산자
- RDD 의 모든 요소에 임의의 함수를 적용할 수 있는 변환 연산자
class RDD[T] { --> RDD는 타입 매개변호 T 를 가진 클래스로 정의
// -- OTHER methods --
def map[U](f: (T) => U: RDD[U] --> map 함수는 또 다른 함수(f: (T) => U)를 인자로 받아 RDD 와 다른 타임(U) 의 RDD 를 반환
// -- OTHER methods --
}
map 함수는 또 다른 함수를 인자로 받아 RDD 하나를 반환한다. map 함수가 반환하는 RDD 는 map 함수가 호출된 RDD 와 다른 타입의 요소로 구성될 수 있음
map 함수가 호출된 RDD 의 객체 타입은 map 함수가 반환하는 RDD 의 타입과 같을 수도 있고 이를 수도 있음
2. distinct 와 flatMap 변환 연산자
collect 행동 연산자
- 새로운 배열을 생성하고 RDD 의 모든 요소를 이 배열에 모아 스파크 셸로 반환
- flatMap 은 기본적으로 주어진 함수를 RDD 의 모든 요소에 적용한다는 점에서 map 과 동일
- flatMap 은 익명함수가 반환한 배열의 중첩 구조를 한 단계 제거하고 모든 배열의 요소를 단일 컬렉션으로 병합
lines.flatMap(_.split(","))
- distinct 는 중복 요소를 제거한 새로운 RDD 를 반환
intIds.distinct
3. sample, take, takeSample 연산으로 RDD 요소 일부 가져오기
- sample 는 호출된 RDD 에서 무작위로 요소를 뽑아 새로운 RDD 를 만드는 변환 연산자
def sample(withReplacement: Boolean, fraction: Double, seed: Long =
Utils.random.nextLong): RDD[T]
> withReplacement : 같은 요소가 여러번 샘플링 될 수 있는지 지정, false 로 지정할 경우 한번 샘플링한 요소는 매서드 호출이 끝날 때까지 다음 샘플링 대상에서 제외, True면 복원 샘플링, false 면 비복원 샘플링
> fraction : 복원 샘플링에서는 각 요소가 샘플링될 횟수의 기댓값(0 이상) 을 의미, 비복원 샘플링에서는 각 요소가 샘플링될 확률(0 - 1 사이의 부동 소수점 숫자) 를 의미
> seed : 난수 생성에 사용, 같은 시드는 항상 유사 난수를 생성하기에 프로그램을 테스트하는데 유용.
- takeSample 는 확률 값 대신 정확한 개수로 RDD 요소를 샘플링
def takeSample(withReplacement : boolean, num: Int, seed: Long = Utils.random.nextLong):
Array[T]
- takeSample 는 ㄷ두번째 인자가 샘플링결과로 반환될 요소릐 개수를 지정하는 정수형 변수
- takeSample 는 배열을 반환하는 행동연산자
반응형
'Book > 스파크를 다루는 기술' 카테고리의 다른 글
챕터 6.1 API 는 어디서 찾을까 (0) | 2022.05.30 |
---|---|
챕터 4. 구조적 API 개요 (0) | 2022.04.18 |
[스파크] 2. 스파크 함수 (0) | 2022.01.23 |