일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Okt
- 태블로
- Python
- 머신러닝
- numpy
- input
- 시각화
- 파이썬
- selenium
- pandas
- 데이터 분석
- 크롤링
- Udemy
- iNT
- pyspark
- Tableau
- scikit-learn
- 형태소분석기
- 데이터
- Word Cloud
- SQL
- konlpy
- 데이터분석
- 인공지능
- ionehotencoding
Archives
- Today
- Total
반전공자
[PySpark] 트랜스포메이션 - sample(), leftOuterJoin(), repartition() 본문
토마스 드라마브, 데니 리의 "PySpark 배우기"를 보고 배워나가는 과정을 기록한 글입니다 ♪
.sample() 트랜스포메이션
- 데이터셋으로부터 임의로 추출된 샘플 리턴
- 첫번째 파라미터 : 중복 허용 여부 명시
- 두번째 파라미터 : 리턴할 데이터셋, 전체 데이터셋 간 크기 비율 명시
- 세번째 파라미터 : 임의 숫자를 생성하기 위한 시드
* 원본 데이터의 10%에 해당하는 임의의 샘플 얻기
>>> fraction = 0.1
>>> data_sample = data_from_file_conv.sample(False, fraction, 666)
* 데이터셋 크기 검증
>>> print('Original dataset: {0}, sample: {1}'.format(data_from_file_conv.count(), data_sample.count()))
Original dataset: 2631171, sample: 263161
오호라 10% 맞군!
.leftOuterJoin(...) 트랜스포메이션
- 두 개의 RDD를 두 개의 데이터셋에서 찾은 값에 기반해 조인 후 두 개의 RDD가 매치되는 데이터에 대해 왼쪽 RDD에 오른쪽 RDD가 추가된 결과 리턴
- 데이터를 섞는 과정을 포함하므로 성능 저하될 수 있음
>>> rdd1 = sc.parallelize([('a', 1), ('b', 4), ('c', 10)])
>>> rdd2 = sc.parallelize([('a', 4), ('a', 1), ('b', '6'), ('d', 15)])
>>> rdd3 = rdd1.leftOuterJoin(rdd2)
a | 1 | a | 4 | |
b | 4 | a | 1 | |
c | 10 | b | 6 | |
d | 15 |
샘플 데이터 rdd1, rdd2를 표로 일단 그려봤다.
왼쪽 rdd를 기준으로 오른쪽 rdd가 추가된 결과를 반환한다고 했으니,,,
>>> rdd3.collect()
[('b', (4, '6')), ('c', (10, None)), ('a', (1, 4)), ('a', (1, 1))]
a | 1 | 4 |
a | 1 | 1 |
b | 4 | 6 |
c | 10 | None |
※ 오른쪽 RDD엔 c 값이 없기 때문에 결과 값엔 c의 짝궁에 None이 들어온다.
참고) .join()
→ 교집합 키인 'a', 'b'의 값 리턴
>>> rdd4 = rdd1.join(rdd2)
>>> rdd4.collect()
[('b', (4, '6')), ('a', (1, 4)), ('a', (1, 1))]
참고) .intersection()
→ 교집합 앨리먼트를 리턴
>>> rdd5 = rdd1.intersection(rdd2)
>>> rdd5.collect()
[('a', 1)]
.repartition(...) 트랜스포메이션
- 데이터셋을 재파티션하면 데이터가 나눠지는 파티션의 개수가 바뀜
- 성능을 크게 저하!
>>> rdd1 = rdd1.repartition(4)
>>> len(rdd1.glom().collect())
4
→ 파티션 개수를 4개로 지정해 재파티션 수행
glom() : 반환하는 리스트의 각 앨리먼트는 명시된 파티션에 존재하는 데이터셋의 모든 앨리먼트에 대한 리스트
▷ glom()이 생성하는 리스트는 파티션의 개수만큼의 앨리먼트를 갖고있음
'데이터분석 > PySpark' 카테고리의 다른 글
[PySpark] 액션 - count(), saveAsTextFile(), foreach() (0) | 2023.03.10 |
---|---|
[PySpark] 액션 - take(), collect(), reduce() (0) | 2023.03.10 |
[PySpark] 트랜스포메이션 - map(), filter(), flatMap(), distinct() (0) | 2023.03.10 |
[PySpark] 텍스트 파일 로드 (0) | 2023.03.10 |
[PySpark] RDD 생성 (0) | 2023.03.09 |