본문 바로가기
빅데이터 시스템

스파크 기초

by 볼록티 2019. 12. 15.
728x90
반응형

 

-이번장에서 배울 것

0.Spark Shell을 사용하는 방법

 -pyspark와 spark-shell이 있다. 이들은 학습이나 데이터 탐색에 interactive(대화식)하다.

 

1.SparkContext 사용하는 방법

 -sc라고 불리는 Spark Context를 사용합니다.

 

2.RDD의 주요 개념

 -그들은 무엇인가?

  -RDD(Resilient Distributed Dataset)

   -Resilient는 메모리에서 데이터가 사라져도 다시 재생할 수 있다는 뜻, Distributed는

   클러스터를 통하여 처리한다는 뜻, Dataset은 최초 데이터는 파일로 불러와지거나

   프로그래밍으로 생성될 수 있다는 뜻이다.

   -RDD는 스파크에서 기본적인 데이터 단위이다.

   -대부분의 스파크 프로그래밍은 RDD의 수행으로 구성된다.

 

 -어떻게 그들을 생성하는가?

   - 한개 또는 그 이상의 파일로 부터 불러오거나, 메모리에서 불러오거나, 또다른 RDD로 

   부터 불러온다.

 

  -그들로 우리는 어떤 작업을 할 수 있는가?

   -RDD 연산의 결과는 두가지 타입으로 나뉜다. 바로 Actions을 통해서 혹은 Transformations

   을 통해서.

   -Actions : RDD 타입에서 원하는 을 반환하는 경우. (예를 들면 count()함수의 결과 같은)

   -> count() - 데이터 개수 리턴

   -> take(n) - 상위 n 개의 값을 리턴

   -> collect() - 모든 값을 리턴

   -> saveAsTextFile(file) - 텍스트 파일로 저장

   

   -Transformations : 현재의 것을 기반으로 새로운 RDD를 정의하게 된다.

   -RDD로 된 데이터는 변경이 불가능하다. 데이터를 수정하기 위한 문장이 필요하다. 그것은.

   -map(function) - RDD기반의 각 레코드에 함수를 적용하여 새로운 RDD 를 생성한다.

   ->map(lambda line: line.upper())

   -filter(function) - 논리 함수를 통하여 RDD기반의 각 레코드에 포함하는지 아닌지에 따라

   새로운 RDD를 생성한다.

   ->filter(lambda line: line.startswith(‘I’))

 

3.스파크가 기능적인 프로그래밍의 원리를 어떻게 사용하는가?

 -LazeExecution(게으른 진행): LazeExecution을 통해서 코드를 실행할 때, Actions이 수행되

  기 전까지는 RDD는 처리되지 않는다.

 mydata = sc.textFile(“purplecow.txt”)

 mydata_uc = mydata.map(lambda s: s.upper())

 mydata_filt = mydata_uc.filter(lambda s: s.startswith(“I”))

 mydata_filt.count() #Actions 이 수행되는 순간

 

 -Chaining Transformations(사슬 변신!)

 위의 코드를 죽죽 이어서 코딩하는 것이라 생각하면 쉬움.

 sc.textFile(“purplecow.txt”).map(lambda s: s.upper()).filter(lambda s: s.startswith(“I”)).count()

 사슬처럼 이러서 변형시킨 코드라는 의미로 알고 넘어간다. R의 %>% 파이프같은 개념.

 

-RDD Lineage and toDebugString

  수행한 작업을 거꾸로 올라가며 출력해줌.

  print mydata_filt.toDebugString()

  print를 해주어 깔끔하게 출력.

 

 -Passing Named Functions(자작나무 함수를 만든걸 사용함.)

 def toUpper(s):

    return s.upper()

 mydata = sc.textFile(“purplecow.txt”)

 mydata.map(toUpper).take(2)

 만든 toUpper함수를 그냥 넣기만 하면 알아서 parameter 매개변수에 쑉 들어가서 실행됨.



 -중요포인트

 1.스파크는 스파크 쉘을 통해서 대화형으로 사용할 수 있다.

 2.RDD는 스파크의 핵심 컨셉이다.

 3.RDD연산은 새로운 RDD를 생성하는 Transformation과 value를 뱉어내는 actions가 있다.

 4.lazy execution은 actions을 받을 때까지 Transformation을 수행하지 않는 것 !

 5.스파크는 기능적인 프로그래밍을 사용한다. 가상의 함수를 활용가능하다.(python, scala)

 

 

 

 

 

 

 

 

 

이글은 서울과학기술대학교 권혁윤 교수님의 강의를 토대로 필기한 내용임을 밝힙니다. :)

 

728x90
반응형

댓글