Apache Spark : Big Data 머신러닝

hotmoist·2021년 10월 14일
0
post-custom-banner

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 함수를 사용하여 이것저것 수행

Spark Streaming

  • 실시간으로 데이터 처리

Spak SQL

  • SQL 쿼리문으로 데이터 처리

MLLib

  • 머신러닝 라이브러리. 머신러닝을 할 수 있도록 함

GraphX

  • 그래프 형태의 데이터를 분석할 때 사용

RDDs

  • 처리하고 싶은 big data를 담는 데이터 구조
  • 분산 변경이 불가능한 객체 모음
  • 새로운 또는 이미 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현

RDDs 생성

nums = parallelize([1, 2, 3, 4]) # hard coding된 리스트를 RDD로 생성
sc.testFile("file:///c:/users/frank/gobs-o-text.txt") # 모든 row를 RDD로 전환(parse)
# or s3n://--> 아마존 s3 버켓,  hdfs:// --> Hadoop
hiveCtx = HiveContext(sc) rows = hiveCtx.sql("SELECT name, age FROM users")
# hive형태의 파일을 부를때 사용. 쿼리문으로 row들을 뽑아올 수 있음

RDD's Transformation

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)

# result: 1, 4, 9, 16

<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

  • distinct value 리턴

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

  • Vector

    • dense vector: 많은 영화 중에서 평가한 영화는 데이터가 있지만 그렇지 않는 것은 데이터가 없음. 이런 공백 데이터를 모두 갖고 있음
    • spase vector: 존재하는 데이터만 저장함. 메모리 효율은 좋으나 복잡함
  • LabeledPoint

    • 사람이 읽을 수 있는 의미를 나타냄
  • Rating

    • 상품의 rating과 같은 개념

    spark mllib을 이용하여 wikipedia search를 구현할 수 있음

  • TF: Term Frequency

  • IDF: Inverse Document Frequency


TF-IDF

TF

  • 얼마나 한 단어가 문서에 자주 나타나는가
  • Document Frecuency: 모든 문서에서 얼마나 한 단어가 나타나는가

> 한 단어가 현재 페이지에서 얼마나 중요한지 나타내는 지표

TF-IDF는 문서가 단어로만 이루어진 것으로 가정함

  • 오타, 대문자, 등등 데이터 전처리에 대해 신경 쓰임
    • spark을 사용하여 처리

TF-IDF의 알고리즘 (간단)

(1) 모든 단어의 TF-IDF 계산

(2) 주어진 단어의 TF-IDF의 값을 이용하여 문서들을 정렬한다

(3) 결과 도출

profile
No coffee, No coding
post-custom-banner

0개의 댓글