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

RDD와 함께 스파크 활용하기.

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

-이번장에서 배울 것

0.메모리에서 데이터 또는 파일로 RDD를 어떻게 생성할지

 -RDD는 여러 타입이 될 수 있다. 

 1.단일 타입: integers, characters, booleans, etc.

 2.시퀀스 타입: strings, lists, arrays, tuples, dicts, etc.(nested 데이터 타입 포함.)

 3.Scala/Java Object(serializable인 경우)

 4.Mixed Types

 

 -몇몇 RDD 타입은 추가적인 기능을 가지고 있다.

 -Pair RDDs: 키와 값을 쌍으로 가지는 형태

 -Double RDDs: 숫자 데이터로 구성된 형태

 

 -RDD를 시퀀스 타입의 데이터에서 바로 가져와본다.

 myData = [‘Alice’,’Carlos’,’Frank’,’Barbara’]

 myRdd = sc.parallelize(myData)

 myRdd.take(2)

 ->테스트를 해보거나, 결합, 또는 기능적으로 데이터를 만들 때 유용하다.

 

 -파일로부터 RDD 만들기.

 sc.textFile(“myfile.txt”)

 sc.textFile(“mydata/*.log”)

 sc.textFile(“myfile1.txt, myfile2.txt”)

 파일의 각 텍스트 라인들은 각기 레코드로 들어오게 된다. textFile은 오직 \n 구분자 텍스트

 파일에서만 작동한다.

 

1.multi-line 레코드들의 파일 포맷을 어떻게 다룰지.

 -스파크는 자바 클래스인 InputFormat과 OutputFormat을 사용한다.

 -input 포맷은 sc.hadoopFile을 사용하고 API클래스의 경우 newAPIhadoopFile을 사용.

 -output 포맷은 rdd.saveAsHadoopFile을 사용하고 API 클래스의 경우 

  saveAsNewAPIhadoopFile을 사용한다.

 

-전체 파일을 RDD로 불러와보기.

 myrdd1= sc.wholeTextFiles(mydir)

 myrdd2=myrdd1.map(lambda (fname,s): json.loads(s))

 for record in myrdd2.take(2):

     print record[‘firstName’]

 

 

 

2.RDD의 몇가지 추가적인 연산들은 어떻게 사용하는지.

 -하나의 RDD의 transformations에는 flatMap, distinct, sortBy등이 있다.

  flatMap: 다수의 원소들에 대해 RDD 기반에서 하나의 원소를 작업해주는 것.

  distinct: 중복 제거.

  sortBy: 정렬.

  sc.textFile(file).flatMap(lambda line: line.split()).distinct()

 

 

 

 -여러 RDD transformations

  intersection: 원래의 RDD 를 양쪽 모두 원소로하여 새로운 RDD를 만든다.

  union: 두 RDD의 모든 원소를 모두 새로운 하나의 RDD에 추가한다.

  rdd1.union(rdd2)

  zip: RDD에서 첫번째 원소와 상응되는 두번째 원소를 각각 쌍을 짓는다.

  rdd1.zip(rdd2)

  subtract: 차집합의 개념.

  rdd1.subtract(rdd2)

 

 

-first: RDD의 제일 첫 원소를 리턴.

-foreach: RDD의 각 원소에 함수를 적용.

-top(n):상위 n개를 리턴

-sample: 원소들을 샘플하여 새로운 RDD생성

-takeSample:샘플된 원소의 배열을 리턴

-mean, sum, variance, stdev

 

-주요 포인트

 1.RDD는 파일에서도 오고, 메모리의 병렬처리된 데이터에서도 오고, 다른 RDD에서도 온다.

 2.sc.textFile은 newline 구분자이고, 각 라인이 RDD 레코드이다.

 3.scwholeTextFile은 전체 파일을 single RDD레코드로 읽는다.

 4.일반적 RDD는 여러 데이터 타입으로 구성된다.

 5.일반적 RDD는 넓은 범위의 transformations 연산을 제공한다.

 

 

 

 

 

 

 

 

 

 

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

 

728x90
반응형

댓글