- 챗봇 페이스북 페이지 바로가기
- 깃허브 레포지토리 바로가기
- 프로젝트 포스팅 목록
아파치 스파크(Apache Spark)
- 빅데이터를 처리하기 위한 하나의 시스템이다.
- 데이터가 늘어나면 늘어날수록 속도, 시간, 비용 여러면에서 효율적으로 처리해야한다.
- 다양한 프로그래밍 언어의 API를 제공한다.
- 머신러닝 등 다양한 패키지가 존재한다.
맵 리듀스(Map Reduce)
- 데이터가 방대한 양으로 늘어날 때 처리하는 방식에 이슈가 생길 수 있다.
- 이슈들을 보완하기 위해 데이터가 여러군데 분산 처리 되어있는 형태로 저장되어 있는데, S3 버킷에 저장한 방식처럼 파티션으로 구분된 데이터를 함수나 어떠한 방식에 의해서 맵핑을 하여 필요한 부분만을 줄이는 리듀스 과정을 거치게 된다.
예제
- 구글 같이 다양한 웹 페이지를 크롤링해서 각 페이지의 노출 랭킹을 분석해야 하는 페이지 랭크(Page Rank)라는 알고리즘을 사용할 때, HTML 안에 들어가는 태그 등의 문법적인 요소들과 컨텐츠를 한 곳에 몰아서 분석하기 보다 아래 그림과 같이 인풋을 병렬적으로 나누어 진행하고 그 다음 어떠한 셔플링 프로세스를 통해서 리듀스하여 결과를 낸다.
AWS EMR
키 페어 생성
- pem 생성 후 프로젝트 디렉토리에 위치시킨다.
chmod
로 권한을 부여한다.
1 |
|
마스터 보안 그룹 접속
인바운드 룰 SSH 추가
SSH 이용 웹 연결 활성화
1 |
|
On-cluster application user interfaces
에서 제플린 접속
하… 깜빡하고 인스턴스 종료를 안하고 하루종일 켜놨더니 24000원 바로 청구되어버렸다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
오늘의 교훈 인스턴스 중지 잘하기!
제플린 파이스파크(Zeppelin Pyspark)
RDD
- 2번째 셀까지는 파이썬에서 진행하던 방식이다.
- 3번째 셀부터 스파크의 방식이다.
- 스파크는 RDD를 기반으로 방대한 데이터를 분산시켜서 맵핑한 후 어플라이해서 얻은 값을 통합하여 받는 구조이다.
- 스파크 컨텍스트(Spark Context)를 통해 패럴렐라이즈(parallelize)하게 3개의 데이터를 쪼개서 RDD로 나누어 준 결과이다.
1 |
|
1 |
|
1 |
|
1 |
|
데이터프레임(dataFrame)
rdd
로 쪼개서map
함수를 통해 쪼개놓은 데이터에 각각 맵핑 시켜주고 선택한다.sqlContext
를 통해 S3에 이전에 저장해 놓았던 데이터를 데이터프레임 형태로 불러와 작업한다.printSchema()
함수를 통해 각각의 값들이 어떤 형태로 들어있는지에 주의를 갖고 살펴봐야 추후에 작업에 어려움이 없다.
1 |
|
1 |
|
1 |
|
컬럼 추출
1 |
|
1 |
|
1 |
|
컬럼 필터링
- 이렇게 불러온 데이터를 내장 함수를 활용해 기본적인 통계량값을 계산할 수 있다.
- 필요에 따라 사용자 정의 함수(UDF: User Definition Function)를 사용하여 전처리를 할 수 있다.
- UDF를 통해 정의한 함수를 불리언 값으로 처리하여 다음과 같이 필터 함수에 적용시켜 컨디션을 줄 수도 있다.
1 |
|
1 |
|
UDF 생성
1 |
|
1 |
|
JOIN
- S3에 저장해 놓은 모든 데이터들을 병합한 마스터 테이블을 만들기 위해 아래와 같은 작업을 한다.
artists parquet
데이터를 불러와 아래와 같이 데이터프레임으로 만들 수 있다.
1 |
|
1 |
|
1 |
|
SQL
- 최종적으로 artists, top-tracks, 그리고 audio_features 모두 병합한 테이블을 만들 것 이다.
- 제플린의 장점 중 하나는 바로 SQL 테이블로 지정하여 쿼리문으로 작업할 수 있는 것이다.
- 해당 값을 바로 시각화할 수 있는 점도 장점 중의 하나이다.
- 옵션에서 없는 그래프를 그리는 것은 파이썬이나 다른 라이브러리를 활용하여 보완할 수 있다.
1 |
|
데이터 분석
1 |
|
1 |
|
1 |
|
- 데이터의 audio feature의 분포를 통해, 예를 들어 가수의 인기도와 트랙의 인기도의 차이가 거의 없는 해당 가수의 대표적인 트랙을 알고 싶다면 아래와 같은 EDA를 먼저 실행하여 audio feature의 특징을 파악하는 것이 중요하다.
- 아래 그림처럼 acousticness는 전체적으로 0쪽으로 치우쳐있어 중심을 대표하는 값으로는 median을 사용해야 될 것이라고 판단할 수 있으며, danceability는 정규분포 꼴을 띄고 있어 mean을 사용해도 무방할 것으로 판단 할 수 있다.
1 |
|
1 |
|
1 |
|