🙂 Spark ML
- 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
- spark.mllib(RDD) vs. spark.ml(DataFrame)
✔ 장점
- 원스톱 ML Framework
- 데이터 프레임과 SparkSQL 등을 이용해 전처리
- Spark MLlib을 이용해 모델 빌딩
- ML Pipeline을 통해 모델 빌딩 자동화
- MLflow로 모델 관리하고 서빙
✔ MLflow
- 모델 관리와 서빙을 위한 Ops 관련 기능 제공
- 모델 개발과 테스트와 관리와 서빙까지 제공해주는 End-to-End Framework
- 파이썬, 자바, R, API를 지원
- Tracking, Models, Projects 지원
✔ 제공 알고리즘
- Classification
- Logistic regression, Decision tree, Random forest, Gradient-boosted tree, ..
- Regression
- Linear regression, Decision tree, Random forest, Gradient-boosted tree, ...
- Clustering
- K-means, LDA, GMM, ...
- Collaborative Filtering
- 명시적인 피드백 (리뷰 평점)
- 암묵적인 피드백 (클릭, 구매 등)
✔ 모델 빌딩 기본 구조
- 트레이닝셋 전처리
- 모델 빌딩
- 모델 검증 (confusion matrix)
🍦 Scikit-Learn과 비교했을 때 장점
- 데이터 크기
- ML 파이프라인을 통해 모델 개발의 반복이 용이
🙂 Spark ML Pipeline
모델 빌딩과 관련된 흔한 문제들
- 트레이닝 셋의 관리가 안됨
- 모델 훈련 방법이 기록이 안됨
- 어떤 트레이닝 셋을 사용했는지
- 어떤 피쳐들을 사용했는지
- 하이퍼 파라미터는 무엇을 사용했는지
- 모델 훈련에 많은 시간 소요
- 모델 훈련이 자동화가 안된 경우 매번 각 스텝들을 노트북 등에서 일일이 수행
- 에러 발생 여지
✔ 개념
- 데이터 과학자가 ML 개발과 테스트를 쉽게 해줌
- ML 알고리즘에 관계없이 일관된 형태의 API를 사용하여 모델링 가능
- ML 모델개발과 테스트를 반복가능
- 4개의 요소로 구성
- DataFrame
- Transformer
- Estrimator
- Parameter
🍦 DataFrame
- ML 파이프라인에서는 DataFrame이 기본 데이터 포맷
- 기본적으로 CSV, JSON, Parquet, JDBC(RDBMS)를 지원
- ML 파이프라인에서 새로운 데이터 소스 지원
- 이미지
- LIBSVM
- label과 features 두 개의 컬럼으로 구성되는 ML 트레이닝셋 포맷
- features 컬럼은 벡터 형태의 구조를 가짐
🍦 Transformer
- 입력 데이터프레임을 다른 데이터프레임으로 변환
- 하나 이상의 새로운 컬럼을 추가
- 2 종류의 Transformer가 존재
- Feature Transformer
- 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만듦
- Feature Engineer에 사용
- Imputer: 기본값 지정에 사용
- StringIndexer: categorical 정보를 숫자 정보로 변환
- VectorAssembler: 주어진 컬럼을 통합하여 하나의 벡터 컬럼으로 변환

Feature Transformer
- Learning Model
- 머신러닝 모델
- Feature DataFrame을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 DataFrame을 출력
- prediction, probability
- Feature Transformer
- transform이 메인 함수
🍦 Estimator
- 머신러닝 알고리즘
- fit이 메인 함수
- 트레이닝셋 DataFrame을 입력으로 받아 모델(Transformer)을 만듦
- 입력: DataFrame
- 출력: ML 모델
- LogisticRegression - Estimator
- LogisticRegression.fit() - Transformer (ML 모델)
- ML Pipeline도 Estimator
- 실행은 fit함수의 호출로 시작
- Estimator는 저장과 읽기 함수 제공

🍦 Parameter
- Transformer와 Estimator의 공통 API로 다양한 인자를 적용
- 두 종류의 파라미터
- Param(하나의 이름과 값)
- ParamMap(Param 리스트)
- 파라미터는 fit (Estimator) 혹은 transform(Transformer)에 인자로 저장 가능
🙂 AWS Spark
EMR 위에서 실행하는 것이 일반적
✔ EMR (Elastic MapReduce)
- AWS의 Hadoop 서비스 (On-demand Hadoop)
- EC2 서버를 worker node로 사용하고 S3를 HDFS로 사용
- AWS 내의 다른 서비스들과 연동이 용이 (Kinesis, DynamoDB, Redshift)

🍦 실행 및 사용 과정
- AWS의 EMR 클러스터 생성
- EMR 생성 시 Spark를 실행 (옵션 선택)
- S3를 기본 파일 시스템으로 사용
- EMR의 마스터 노드를 드라이버 노드로 사용
- 마스터 노드를 SSH로 로그인
- Spark의 Cluster 모드에 해당
| 클러스터 매니저 | 실행 모드 | 프로그램 실행 방식 |
| local[n] | Client | Spark Shell, IDE, 노트북 |
| YARN | Client | Spark Shell, 노트북 |
| YARN | Cluster | spark-submit |
'데이터엔지니어링' 카테고리의 다른 글
| [11주차] 하둡과 Spark (4) (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 |