Book/스파크를 다루는 기술

[스파크] 1. RDD 의 기본 행동 연산자 및 변환 연산자

쟈누이 2022. 1. 22. 23:05
반응형

 

 

  • 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