Spark란 무엇인가?
- 많은 양의 데이터를 다루는 프레임 워크
- 데이터를 RDD (resilient distributed dataset)라는 구조로 데이터를 나열한다.
- RDD를 통해서 데이터 관련 연산 수행하고, 하나의 컴퓨터에서 모든 연산을 하지 않고 분산 처리하여 여러대의 컴퓨터에서 연산을 수행할 수 있다.
Scalable
- Cluster Manager을 통해 분산 처리가 가능함.
- Hadoop의 YARN을 이용하여 진행중인 task를 여러대의 컴퓨터로 분산처리할 수 있음,
Fast
- DAG Engine (directed acyclic graph)를 통해 데이터 처리를 액션을 취하기 전에 가장 효율적인 처리 방법을 모색하고, 액션을 취할때 최적의 결과를 나타나도록 함.
Hot
- 많은 대기업에서 사용 중 (Amazon, Ebay ...)
Spark의 컴포넌트
Spark Core
Spark Streaming
Spak SQL
MLLib
- 머신러닝 라이브러리. 머신러닝을 할 수 있도록 함
GraphX
RDDs
- 처리하고 싶은 big data를 담는 데이터 구조
- 분산 변경이 불가능한 객체 모음
- 새로운 또는 이미 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현
RDDs 생성
nums = parallelize([1, 2, 3, 4])
sc.testFile("file:///c:/users/frank/gobs-o-text.txt")
hiveCtx = HiveContext(sc) rows = hiveCtx.sql("SELECT name, age FROM users")
map, flatmap
- input: RDD → output: 새로운 RDD, 모든 row를 새로운 형태로 반환
- flatmap → multiple row를 넣을 수 있음, map은 하나만 가능
map() 의 예시
rdd = sc.parallelize([1, 2, 3, 4])
rdd.map(lambda x:x*x)
<lambda란?>
- RDD 메소드에서 function을 매개변수로 많이 받음
- inline 형태로 function을 넣음 → 함수형 언어와 같음
rdd.map(lambda x:x*x)
def squareIt(x):
return x*x
rdd.map(squareIt(x))
filter
- boolean function이용
- preserve → true: 해당 row를 유지
distinct
sample
그 외: union, intersection, subtract, cartesian
RDD Actions
- collect, count, countByValue, take, top, reduce, ...
- Lazy Evalutation
- Action을 수행하기 이전까진 아무일도 일어나지 않는다
최근에는 RDD보다는 Dataset (or DataFrame) 구조를 사용함
- Dataset은 데이터에 대한 정보를 사전에 이미 알 수 있으므로 RDD보다 더 빠르다
- MLLib이 Dataset을 main 구조로 변경하고 있음
Introduction MLLib
머신러닝을 위한 Spark의 component
MLLib Capabilities
- Feature extraction
- Term Frequency / 검색을 위한 Inverse Document Frequency
- Basic statistics
- Chi-squared test, Pearson / Spearman correlation, min, max, mean, variance
- Linear regression, logistic regression
- Support Vector Machines (SVM)
- Naive Bayes classifier
- Decision trees
- K-Means clustering
- Principle component analysis, singular value decomposition
- Recommenations using Alternating Least Squares
MLLib special data type
TF-IDF
TF
- 얼마나 한 단어가 문서에 자주 나타나는가
- Document Frecuency: 모든 문서에서 얼마나 한 단어가 나타나는가
> 한 단어가 현재 페이지에서 얼마나 중요한지 나타내는 지표
TF-IDF는 문서가 단어로만 이루어진 것으로 가정함
- 오타, 대문자, 등등 데이터 전처리에 대해 신경 쓰임
TF-IDF의 알고리즘 (간단)
(1) 모든 단어의 TF-IDF 계산
(2) 주어진 단어의 TF-IDF의 값을 이용하여 문서들을 정렬한다
(3) 결과 도출