Apache Spark
- SQL, 스트리밍, 머신러닝 및 스래프 처리를 위한 기본 제공 묘듈이 있는 대규모 데이터 처리용 통합 분석 엔진
- 클라우드의 Apache Hadoop, Apache Mesos, Kubernetes에서 자체적으로 실행될 수 있으며 다양한 데이터 소스에 대해 실행될 수 있음
- 대용량 데이터(> 100GB)를 다루는 것이 특화된 프레임 워크
- Pyspark: Python을 기반으로 하여 별도 언어 공부 필요 X
- 대용량 데이터: 대용량 데이터를 다루는 기술에 대한 이해
- 분산 처리: 여러 대의 컴퓨터를 사용한다는 것에 대한 이해
파이썬과 데이터, 메모리
파이썬 작업 중 에러 종종 발생(OOM) -> 특히 대용량 데이터 처리 시 자주 발생
스파크를 쓰든, 파이썬을 쓰든 메모리 관리 중요
메모리
- 윈도우에서는 작업관리자, 맥에서는 활성 상태 보기, 리눅스에서는 htop 등으로 메모리 사용량 확인 가능
- 기억 장치
- RAM
- 작업 공간
- 데이터를 갖고 작업 하기 위해 데이터를 RAM에 올린다.
- OS(윈도우 등)와 기본적인 프로그램을 올리면 2~6GB 차지
- 컴퓨터 종료 시 RAM에 올라간 데이터 삭제
- Disk
- 저장 공간
- 장기적으로 데이터를 보관(저장)하는 공간
- 컴퓨터를 꺼도 Disk의 데이터는 사라지지 않는다.
- RAM
CPU
- 일꾼
- 코어의 수
- 같은 코어의 수라도, 고성능의 CPU는 수배 이상 빠를 수 있다.
- 병렬 처리: 하나의 작업을 위해 여러 코어 사용
- 스파크 => 여러 대의 PC를, 그리고 각 PC의 여러코어 모두 사용
Data Type
- 적절한 데이터 타입을 사용하면, 보통 30% 이상의 메모리 절약 가능
- 정수(Integers)
- 이진법으로 표현
- 뒤의 숫자는 얼마나 많은 메모리를 할당(assign)할 것인지에 대한 얘기
- 더 많은 메모리를 할당할수록, 더 큰 숫자를 담을 수 있다.
- 정수(Integers)


int8: -128 ~ 127
int16: -32768 ~ 32727
Int32: -2,147,483,648 ~ 2,147,483,647
Int64: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
=> 부호를 위해 1비트(메모리 단위) 사용
오버플로(Overflow)
- 크기에 맞지 않는 데이터를 넣어 의도하지 않은 결과가 나오는 것
- 파이썬의 데이터 타입은 기본적으로 동적(Dynamic)이기 때문에 자동으로 데이터형이 바뀐다.
- 큰 숫자를 다루는 것은 굉장히 주의 요함
부동소수점(Floating points)
- 사람에게 직관적이지 않지만, 컴퓨터는 부득이 사용하는 개념
- 정수는 이진법으로 어렵지 않게 표현 가능, BUT 0.2, 18.5, π 같은 정수가 아닌 숫자를 정확히 표현하기 위해 사용
- 하나의 숫자를 형태와 자릿수로 구분하여 표현
- 일부의 데이터는 형태를, 나머지 데이터로 자릿수를 표현
- 이진법, 소수부와 정수부가 다르기 때문에 정확하게는 조금 다름
- ex 1) 478.224 = 4.78224 * 10²
- ex 2) 0.0098765 = 9.8765 * 10⁻³
- 정수와 마찬가지로 float16, float64 등 사용하는데, 더 큰 메모리를 사용할수록 값이 정확해지지만 데이터가 더 무거워진다.
- 원리상 필연적으로 오차 동반
- 더 많은 메모리(16 -> 32)를 사용할수록 줄어들지만 이론적으로 무한히 많은 메모리를 사용해야만 이 오차를 정확히 없앨 수 있다.
- 딥러닝의 경우 의도적으로 오차를 감수해서라도 메모리를 줄이기도 한다.(float 16 등)
String, Category
- 대부분의 소프트웨어는 유니코드(unicode)를 이용하여 문자열 인코딩
- 메모리를 굉장히 많이 차지
- 대안으로 범주(Category)형 자료 사용 가능
- Pandas의 경우 각데이터의 고유값을 내부에서 숫자로 치환하여 사용
- 대안으로 범주(Category)형 자료 사용 가능
Datetime
- 시간과 관련된 정보
- 일반적으로 Unix Timestamp 기준 (UTC time zone 사용 -> 1970년 1월 1일 0시 기준으로 몇초가 경과했는지 숫자로 표현)
- 연,월,일,시 등의 표현은 사람마다, 소프트웨어마다, 회사마다, 팀마다 모두 다를 수 있다.
- 일반적으로 표현하기 위한 양식 또한 존재
- 숫자인 Unix timestamp를 사람이 이해 가능한 문자열로 교체
- 문자열을 Unix timestamp로 교체
- 일반적으로 년도를 %y, %Y(4자리)로, 월을 %m, 일을 %d로 표현
- 일반적으로 표현하기 위한 양식 또한 존재
Time zone
- 시간 데이터를 다룰 때 굉장히 중요한 부분
- 소프트웨어는 범국가적이기 때문에, 시간의 표준화 필수
- 일반적으로 컴퓨터 공학에서는 UTC 기준, Unix timestamp도 UTC 기준
- 대부분의 Database 또한 timezone 정보를 필수로 한다.
File format
- 디스크에는 데이터를 어떻게 저장하는지
- 시간적 비용
- 읽고 쓰는데 걸리는 시간
- 파일 유형에 따라 수십배 차이 발생
- 공간적 비용
- 저장된 파일의 크기
- 파일 유형에 따라 수십배 차이 발생
- 입/출력 시에 필요한 메모리도 굉장히 중요
json
- csv, txt와 크게 다르지 않다.
- 저장된 자료를 python의 dictionar와 같은 형식으로 강제 => JSON Object라고 칭함
- ex) {"키": "값"}
- dict와 같지 X
- 파이썬의 dict를 json으로 변환하여 사용 가능 => dump라고 칭함
- 여러 JSON Object를 JSON Array에 담을 수 있다.
- 비교적 개발자의 선호도가 높으며, 비교적 대용량의 데이터도 JSON으로 관리하는 경우 다수 존재
- API 통신: 보통 JSON 형식
- 여전히 무거워 대용량 데이터 처리에 불편
- txt와 마찬가지로 encoding방법에 따라 다르게 저장, utf-8을 사용하는 것이 일반적
Pickle
- 하나의 컴퓨터로 개인용 프로젝트에서 데이터를 관리할 때 편리한 데이터 형식
- 버전과 운영체제에 대한 의존(Dependency)이 있기 때문에 협업할 때 데이터를 주고 받으면 작동하지 않을 위험 존재
- csv, json보다 2~30% 정도 용량이 가볍다.
- read/write 속도가 수십배 이상 빠르다
- nested type 지원
- 병렬처리에서 그리고 때로는 분산처리에서 내부 데이터를 pickle로 직렬화(Serialize)
Parquet (파케이)
- 대용량 데이터 저장에서 표준
- 굉장히 가볍고 빠르다
- 다수의 OLAB Database가 내부적으로 parquet를 사용하여 데이터 저장
- Spark 또한 지원
기타
- arrow나 hdfs, feather도 때에 따라 유용하게 사용
- 압축, 속도가 가능한 이유는 기본적으로 칼럼기반(columnar)이기 때문
I/O
- Input & Output
- 다양한 맥락에서 쓰이지만, 여기서는 데이터의 입출력 칭함
- I/O 메모리 사용
- 전처리에서 잘 돌던 데이터가, 저장(save)에서 터지는(OOM) 경우 존재
- I/O Speed
- 가장 빠른 데이터 수급은 메모리
- Network < Disk < Memory(캐시 생략)
- In-memory DB 사용
- 스파크는 기본적으로 모든 데이터를 Memory에서 처리
- 내부족으로는 lazy computation 등으로 좀 더 복잡
- 가장 빠른 데이터 수급은 메모리
- I/O 메모리 사용
클라우드
- 관리가 훨씬 쉽고, 보안이 뛰어나며, 가용성이 좋다.
- 스파크를 쓸 때는 여러 대의 컴퓨터를 사용하는데, 보통 클라우드의 서버를 빌린다.
- 클라우드 3대장
- AWS : 시장 지배중 (한 번 시장 지배 이후, 모든 것의 기준점)
- GCP : Bigquery 원툴
- Azure : 편하지만, 비쌈
- 그 외 여러 가지 이유(지원, 투자, 계열사 등)로 기타 클라우드 사용하는 경우 다수 존재
- 클라우드 3대장
스토리지
- AWS를 이용하게 되면 기본적으로 대부분의 파일(데이터)를 S3에 보관
- 내 컴퓨터에 보관하는 것보다 안전하며, 임의의 팀원이 접근할 수 있다.
- 그 데이터를 다시 데이터베이스에 연결하여 사용 가능
- 스파크는 S3에서 직접 읽을 수도, DB를 통해 읽을 수도 있다.
- 비용에 주의
엔진
- 컴퓨터를 빌리는 것
- 단일 기기를 빌릴 수 도 있고, 여러대를 빌려쓸 수도 있다.
- 접속은 보통 ssh 이용, vscode를 이용하면 좀 더 편리
데이터베이스
- 쓰는 이유:
- 1. 데이터 공유: 여러 사용자가 동시에 접근하여 공유 가능
- 2. 데이터 보호: 데이터를 보호하기 위해 다양한 보완 기능 제공
- 3. 데이터 검색: 데이터를 쉽게 검색할 수 있도록 인덱싱 기능 제공
- 4. 데이터 백업과 복원: 데이터를 백업하고 복원하는 기능을 제공하여 데이터 손실을 방지(중요한 데이터 안전하게 보호)
- 유형
- RDS : 관계형 데이터베이스
- postgress와 mysql 등 다양한 옵션 존재, 보통 엔지니어가 결정
- 대동소이, 인덱싱 잘 활용하기
- 항상 서버가 떠 있어야 한다. -> 비용 발생
- Athena : S3에 있는 데이터를 직접 간편하게 분석할 수 있는 대화형 쿼리 서비스
- 보통 S3에 있는 데이터와 연동
- Serverless (쿼리를 운용할 때만 잠시 기기를 빌려 연산한 뒤 다시 반납) -> 저렴한 비용
- 바로 Spark와 연동 가능
- Redshift : 빠르고 강력한 데이터 웨어하우징
- 구동위해 클러스터(여러 대의 컴퓨터) 구성하여 운영해야 한다. => 비싼 비용
- 복잡한 연산에 조금 더 효율적
- Spark와 연동 가능
- RDS : 관계형 데이터베이스
아키텍쳐 예시

EMR
- 페타바이트급 데이터 처리, 대화식 분석 및 기계 학습을 위한 빅 데이터 솔루션
- AWS에서 Spark를 사용하면, 보통 EMR을 이용
'내일배움캠프' 카테고리의 다른 글
| [내일배움캠프] TIL 45일차 26.04.06(월) (1) | 2026.04.06 |
|---|---|
| [내일배움캠프] TIL 44일차 26.04.03(금) (0) | 2026.04.03 |
| [내일배움캠프] TIL 42일차 26.04.01(수) (0) | 2026.04.01 |
| [내일배움캠프] TIL 41일차 26.03.17(화) (0) | 2026.03.17 |
| [내일배움캠프] TIL 40일차 26.03.16(월) (0) | 2026.03.16 |