일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTML
- SQL
- cloud platform
- Til
- beuatifulsoup
- 데이터 시각화
- 코딩 테스트
- VPC
- 슈퍼셋
- Kafka
- django
- airflow
- GCP
- 코테 연습
- 데이터 엔지니어
- 데브코스
- superset
- Selenium
- PCCP
- 팀 프로젝트
- 코딩테스트
- Snowflake
- Tableau
- AWS
- Spark
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
데이터 엔지니어링 59일차 TIL 본문
학습 내용
Spark의 주요 파일 타입
Parquet : Spark의 기본 파일 포맷
- 트위터와 클라우데라에서 공동 개발(Doug Cutting)
파티션 다시 나누기
df2 = df.repartition(4)
파티션 줄이기
df3 = df2.coalesce(2)
파티션 저장
format종류 : avro ,parquet, json 등
df.write \
.format("avro") \
.mode("overwrite") \
.option("path", "dataOutput/avro/") \
.save()
Transformations and Actions
- Transformations
- Narrow Dependencies : 독립적인 partition level 작업
- select, filter, map 등등
- Wide Dependencies : Shuffling이 필요한 작업
- groupby, reduceby, partitionby, repartition, coalesce 등
- Actions
- Read, Write, Show, Collect -> Job을 실행시킴(실제 코드가 실행)
- Lazy Exeuction
- 더 많은 오퍼레이션을 볼 수 있기에 최적화를 더 잘할 수 있다. => 그래서 SQL이 더 선호됨
Jobs, Stages, Tasks
- Action : Job을 하나 만들어내고 코드가 실제로 실행됨
- Job : 하나 혹은 그 이상의 stage로 구성(Stage는 Shuffling이 발생하는 경우 새로 생김)
- Stage : DAG의 형태로 구성된 Task들 존재(stage의 Task들은 병렬실행이 가능)
- Task : 가상 작은 실행 유닛으로 Executor에 의해 실행됨
Bucketing
- DataFrame을 특정 ID를 기준으로 나눠서 테이블로 저장
- 다음부터는 이를 로딩하여 사용함으로써 반복처리시 시간 단축
- DataFrameWriter의 bucketBy 함수 사용
- Bucket의 수와 기준 ID 지정
- 데이터의 특성을 잘 알고 있는 경우 사용 가능하다.
File System Partitioning
- 데이터를 Partition Key 기반 폴더("Partition") 구조로 물리적으로 나눠저장
- 굉장히 큰 로그 파일을 데이터 생성시간 기반으로 데이터 읽기를 많이 한다면?
- 데이터 자체를 연도-월-일의 폴더 구조로 저장
- 데이터를 읽기 과정을 최적화(스캐닝 과정이 줄어들거나 없어짐)
- 데이터 관리도 쉬워짐(Retention Policy적용시)
- Partition key를 잘못 선택하면 엄청나게 많은 파일들이 생성된다.
'데브코스' 카테고리의 다른 글
데이터 엔지니어링 61일차 TIL (1) | 2024.06.30 |
---|---|
데이터 엔지니어링 60일차 TIL (0) | 2024.06.30 |
데이터 엔지니어링 58일차 TIL (0) | 2024.06.30 |
데이터 엔지니어링 57일차 TIL (0) | 2024.06.30 |
데이터 엔지니어링 56일차 TIL (0) | 2024.06.17 |