일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- 데이터 수집
- 프로그래머스 큰 수 만들기
- 카프카
- 지연연산
- kafka 설치
- AWS Crawler
- 하둡1.0
- Databricks
- EMR 구조
- 서버간 복사
- lazy evaluation
- ORACLE MSSQL차이
- Catalyst Optimizer
- Spark 최적화
- 빌드도구
- 하둡2.0
- 실행엔진
- Spark
- 데이터베이스복사
- 데이터파이프라인
- 데이터엔지니어링
- 스파크
- 문맥교환
- 런타임데이터영역
- 하둡에코시스템
- 하둡
- 프로그래머스힙
- freenom
- ORACLE문법
- Today
- Total
띵유로그
[스파크]RDD연산자2(sample, take, takeSample) 본문
1. sample 연산자
호출된 RDD에서 무작위로 요소를 뽑아 새로운 RDD를 만드는 변환 연산자.
withReplacement 인자를 false로 지정하면 메서드 호출이 끝날 때까지 다음 샘플링대상에서 제외한다.
즉, 복원(replace)하기 않고 제거됨.
(복원 샘플링과 비복원 샘플링)
두번째 인자인 fraction은 각 요소가 샘플링될 횟수의 기댓값이다. 비복원 샘플링에서는 각 요소가 샘플링기대확률을 나타냄
이전 게시글에서 주문 고객 ID리스트를 만들었으니 그 예제를 다시 사용해본다.
scala > val s = uniqueIds.sample(false, 0.3)
scala > s.count
의 결과가 2일수도,1일수도, 3일 수도 있다. 왜냐하면 앞서 언급했듯이 fraction 값은 각 요소가 샘플링 결과에 포함될 확률일 뿐이기 때문이다.
복원 샘플링를 시도해보자.
scala > val swr= uniqueIds.sample(true, 0.5)
scala > swr.collect
Array[String] = Array(80, 15, 15, 15, 31, 77, 77, 98)
15, 77이 여러번 샘플링됨.
그런데 샘플링한 개수는 매번 다를 수 있다. (fraction 값은 각 요소가 샘플링 결과에 포함될 확률일 뿐이기 때문이다.)
그래서 정확한 개수로 RDD의 요소를 샘플링하려면 takeSample행동 연산자를 사용한다.
2. takeSample 연산자
sample연산자와 달리 두번째 인자가 샘플링 결과로 반환될 요소의 개수를 지정하는 정수형 변수다.
또한 sample연산자는 변환 연산자였던 반면, takeSample연산자는 행동연산자다.
3. take연산자
데이터의 하위 집합을 가져오는 또 다른 행동 연산자다.
지정된 개수의 요소를 모을 때까지 RDD의 파티션을 하나씩 처리해서 결과를 반환한다. (분산이 안됨.)
RDD의 데이터를 살짝 보는데 자주 사용된다. (take결과는 단일 머신으로 전송되므로 큰 수를 지정하면 안됨.)
scala > uniqueIds.take(3)
res11: Array[String] = Array(80, 20, 15)
'DataEngineering > SPARK' 카테고리의 다른 글
[SPARK] SPARK 지연연산의 이점 (0) | 2021.08.18 |
---|---|
[스파크] RDD - Double RDD 전용 함수 (0) | 2021.03.08 |
[스파크] RDD연산자 (0) | 2021.03.08 |
[스파크] RDD 개요 (0) | 2021.03.08 |
[SPARK] SPARK DATAFRAME이란 - RDD와 어떻게 다른가? (0) | 2020.12.06 |