🙂 Spark 파일 포맷
Unstructured: Text
Semi-structured: JSON, XML, CSV
Structured: PARQUET, AVRO, ORC, SequenceFile
🙂 Execution Plan
✔ Transformations and Actions
- Transformations
- Narrow Dependencies: 독립적인 Partition Level 작업
- select, filter, map 등
- Wide Dependencies: Shuffling이 필요한 작업
- groupby, reduceby, partitionby, repartition, coalesce 등
- Narrow Dependencies: 독립적인 Partition Level 작업
- Actions
- Read, Write, Show, Collect -> Job을 실행시킴 (실제 코드가 실행)
- Lazy Execution
- 어떤 장점이 존재할까?
- 더 많은 오퍼레이션을 볼 수 있기에 최적화를 더 잘할 수 있음. SQL이 선호
- 어떤 장점이 존재할까?
Action -> Job -> Stage -> Task
🙂 Bucketing과 File System Partitioning
- Bucketing
- 먼저 Aggregation이나 Window함수나 Join에서 많이 사용되는 컬럼이 있는지
- 있다면 데이터를 이 특정 컬름을 기준으로 테이블로 저장
- 이 때의 버킷의 수도 지정
- File System Partitioning
- Hive에서 많이 사용
- 데이터의 특정 컬럼을 기준으로 폴더 구조를 만들어 데이터 저장 최적화
- 위의 컬럼을 Partition Key 라고 부름
✔ Bucketing
DataFrame을 특정 ID를 기준으로 나눠서 테이블로 저장
- 다음부터는 이를 로딩하여 사용함으로써 반복 처리시 시간 단축
- DataFrameWriter의 bucketBy 함수 사용
- 데이터의 특성을 잘 알고 있는 경우 사용 가능
✔ File System Partitioning
- 데이터를 Partition Key 기반 폴더 ('Partition') 구조로 물리적으로 나누어 저장
- Hive에서 사용하는 Partitioning을 말함
- Partitioning의 예와 이점
- 굉장히 큰 로그 파일을 데이터 생성시간 기반으로 데이터 읽기를 많이 한다면?
- 데이터 자체를 연도-월-일의 폴더 구조로 저장
- 보통 위의 구조로 이미 저장되는 경우가 많음
- 이를 통해 데이터 읽기 과정 최적화
- 데이터 관리도 쉬워짐 (Retention Policy 적용시)
- 굉장히 큰 로그 파일을 데이터 생성시간 기반으로 데이터 읽기를 많이 한다면?
- DataFrameWriter의 partitionBy 사용
- Partition key를 잘못 선택하면 너무 많은 파일 생성
'데이터엔지니어링' 카테고리의 다른 글
[11주차] 하둡과 Spark (5) (0) | 2024.06.24 |
---|---|
[11주차] 하둡과 Spark (2) (0) | 2024.06.18 |
[11주차] 하둡과 Spark (1) (0) | 2024.06.17 |
[10주차] Airflow 고급 기능, DBT와 Data Catalog (4) (1) | 2024.06.07 |
[10주차] Airflow 고급 기능, DBT와 Data Catalog (3) (1) | 2024.06.05 |