이번 주차는 Spark(스파크) 학습을 진행했습니다. Kaggle 사이트의 Titanic 데이터를 통해 EDA, 전처리, 모델 학습 과정을 진행했고, 이를 통해 스파크 활용에 익숙해질 수 있었습니다.
마지막 날에는 빅데이터 시스템 관련 학습이 마무리가 되가는 단계로 스파크와 Jeju_bus.csv 파일을 학습해 "버스 도착 예정 시간 예측" 하는 모델을 만들었습니다. 이 과정에서 하둡을 통해 csv 파일을 전달하고 또 스파크에서 완성된 모델을 하둡에 저장 및 리눅스 환경과 윈도우 환경이 공유 중인 폴더로 옮기는 등 다양한 작업을 경험할 수 있었습니다. 또한 다음주에 이를 이어서 Apache-Kafka를 통해 실시간 버스 데이터를 받아 해당 모델을 통해 예측하고 이를 웹으로 배포하는 것까지 할 예정입니다.
10월 9일은 한글날로 휴강이었습니다.
[Databricks](https://community.cloud.databricks.com/)
사이트를 이용해 Spark(스파크)
학습을 진행했습니다.
ML cluster
를 생성해 코드 연산을 할 수 있는 가상의 컴퓨터를 만들어 사용했습니다.Spark_Prime
실습
# Databricks notebook source
from pyspark.sql import SparkSession
# spark 접속
sc = SparkSession.builder\
.master("yarn")\
.appName("spark_prime01")\
.getOrCreate()
# COMMAND ----------
# 소수를 계산할 최대 수
MAX = 500000
# COMMAND ----------
# 3 이상 ~ MAX+1 미만의 수 저장할 리스트 생성
# 해당 리스트는 8개의 멀티 스레드로 동시 실행
rdd = sc.sparkContext.parallelize([ i for i in range(3,MAX+1)], 8)
# COMMAND ----------
# 소수 계산 함수
# rdd에 저장된 값을 순서대로 매개변수 n에 대입
def get_prime(n) :
isPrime = True
for i in range(2,n):
if n % i ==0:
isPrime=False
break
if isPrime :
return n
# COMMAND ----------
import time
# 현재시간 start에 대입
start = time.time()
# rdd 에 저장된 숫자들을 순서대로 get_prime에 대입
# .collect() : 함수의 실행결과를 가져옴
prime_list = rdd.map(get_prime).collect()
end = time.time()
print("소요시간 : ", end-start)
# COMMAND ----------
이외에도 Kaggle
사이트에서 얻은 Titanic.csv
파일을 이용해 EDA
를 진행했습니다.
EDA를 통해 관련성이 있어 보이는 컬럼들을 찾았습니다.
Titanic.csv
파일을 SparkDataFrame
으로 받아 전처리 과정을 진행했습니다.
✅ 전처리 완료된 Titanic
EDA와 전처리를 마친 Titanic
데이터를 RandomForest
모델과 XGBoost
모델 을 통해 분류 학습을 진행했고, 정확도를 측정했습니다.
PassengerId, Name, Sex, Age, Ticket, Cabin, Embarkedm Sir
컬럼을 삭제했습니다.RandomForest(rf)
모델 객체를 생성해 학습을 진행했고, 정확도 결과 : 0.8397
이 나왔습니다.XGBoost(xgb)
모델 객체를 생성해 기본 파라미터 값으로 학습 진행, 정확도 결과 : 0.8258
이 나왔습니다.HyperOpt
모듈을 참고해 파라미터 값을 찾는 과정을 진행했습니다.colsample_bytree, learning_rate, max_depth, min_child_weight
의 최적의 값들을 찾았고, 정확도 측정 결과 : 0.8641
로 향상된 것을 확인할 수 있었습니다.jeju_bus.csv
파일과 Spark
, RandomForest
모델을 통해 버스 운행 시간을 예측하는 모델을 구현하는 학습을 진행했습니다.
스파크 개념을 잘 학습할 수 있었고, 실습 과정을 통해 사용하면서 흥미를 느껴서 좋았습니다.
스파크의 노트북 파일에서 파이썬과 마크다운 이외에 %sql
을 통해 SQL
쿼리문을 자유롭게 쓸 수 있어 좋았습니다.
SparkDataFrame
과 PandasDataFrame
의 사용 차이에 대해 느끼고 EDA 과정을 할 수 있어 만족스러웠습니다.
pyspark
의 다양한 문법 사용을 할 수 있어 좋았습니다.
이전에 배웠던 머신러닝 알고리즘들을 되돌아볼 수 있는 시간이었고, Spark
사용을 많이 할 수 있어 만족스러웠습니다.
Databricks
의 무료 계정을 사용 하다 보니 코딩을 조금만 하지 않더라도 클러스터가 자꾸 종료되었고 무료 계정에서는 다시 실행할 수 없어 이때마다 새로운 클러스터를 생성해 학습을 이어나갔습니다.
클러스터 하나를 생성할 때도 대개 10분 정도의 시간이 걸려 지체 되는 상황이 자주 발생되어 아쉬웠습니다.
Spark
의 모델과 apache-kafka
을 이용해 30초마다 실시간으로 버스 운행 시간을 예측하고 DB 저장 후 웹 페이지로 보여주는 전체의 학습 과정을 위해 도커를 이용해 Zeppelin
사이트로 접근까지 완료할 수 있었습니다. 그러나 사용 중인 PC의 디스크 저장 공간 부족과 메모리로 인해 Spark
연산이 매우 느렸고, 결국 도커가 꺼지는 등의 사고를 겪어 당장의 구현보다는 컴퓨터 용량 확보를 위한 시간을 보낼 수 밖에 없었습니다. 수업 시간 내에 이를 다 하지 못한 점이 아쉬웠으나, 주말 동안 홈PC를 통해 모델 구현을 완료해볼 예정입니다.
Spark_rf_model
구현 (완료)
복습 및 취업 준비