데이터분석 6기/본캠프
2025-05-26 spark
seyeon1130
2025. 5. 26. 19:55
spark
- 비싸고 오래걸리고 pandas랑 달라서 코드 다시 짜야해서 최대한 안쓰는 걸 추천
하지만 메모리를 절약할 수 있음
메모리
- 메모리
- ram: 작업공간= 컴 끄면 사라짐 -> spark에서 가장 중요
- disk: 저장공간
- Network < Disk < Memory(ram) 순으로 i/o가 빠름
- 스파크는 기본적으로 모든 데이터를 Memory에서 처리
- 문자열의 메모리 절약 하는 방법 ->범주형으로 바꾸기
- 부동소수점 : 12e23434 이런식으로 e처럼 정수로 표현하기 어려운 걸 바꿔서 표현할 때 부동소수점이라고 함. 하지만 그 특성상 100% 정확한 것은 아님.
클라우드
spark는 여러 대의 컴퓨터가 필요하기 때문에 클라우드 서버를 빌리는 경우가 많다.
aws 기능들
s3 : 스토리지
- Athena: S3에 있는 데이터를 직접 간편하게 분석할 수 있는 대화형 쿼리 서비스
- 보통 S3에 있는 데이터와 연동
- Serverless라고 하여, 쿼리를 운용할 때만 잠시 기기를 빌려 연산한 뒤 다시 반납 ->그래서 가격이 좀 저렴함
- RDS 는 서버 사용해야해서 비싸고, Redshift: 빠르고 강력한 데이터 웨어하우징이지만 여러 컴퓨터 사용해야해서 비쌈
ec2 : 엔진 ->접속은 ssh(원격 접속 도구)로, vscode도 활용 가능
깨알 지식
- pandas에서 정수형에 null값이 섞여있으면 그 컬럼은 int가 아니라 float형이 된다.
- assert a>5 이런식이면 a가 5보다 작거나 같을 때 에러남 즉, 이거 맞아? 하고 확인하는 용
- Pickle 은 개인 프로젝트 시 사용하는 포맷인데, 가장 빠름. 병렬처리 분산처리할 때 이렇게 바꿔서 직렬화함
- Supervisord : 비주기적으로 죽는 프로세스를 반복적으로 부활시켜 운영할 때 유용합니다
spark를 사용하지 않는 방법
메모리를 줄이면 된다.
문자열 데이터를 카테고리형으로 바꾸고, float를 int로 바꾸는 등으로 줄이면 됨
- 샘플링: 데이터가 너무 많다면 샘플링 해서 일부 진행
- 분할처리: 10%씩 10번 하는식으로 분할해서 진행 ->서로 연결된 데이터의 경후 분할이 어려워서 안됨
- 분할처리 이후에는 결과만을 집계해서 최종 결과 도출
- dask: 스파크랑 비슷하지만 padas랑 코드가 크게 차이나지 않아 편리( 보통은 작으면 pandas, 중간은 dask, 크면 spark를 쓰지만 그럼 세 개나 공부해야해서 보통 pands 안되면 spark사용) ->엄청 큰 파일을 열 때 유용
- 자동화(주기적인 것: batch, 실시간: streaming)
- cron(스케줄링) - 로드벨런싱과같은 자원관리 사용 못함
병렬처리 vs 분산처리
병렬처리는 한 머신에서 여러 코어가 한 작업을 동시에 수행하는 것.(sklearn에서 njob)
분산 처리는 여러 컴퓨터로 각각의 작업을 수행하는 것. (스파크)
연산이 복잡해서 spark를 쓴다면 틀렸음. spark는 메모리를 줄이는 용도이지 연산 문제가 아님.(연산이 느리다면 전처리 문제일 것)
파이썬은 멀티스레드가 아닌 멀티 프로세싱이다.