RDD Operation(2) - Actions

RDD Operation(1) -Transformations 보러 가기

Actions

  • collect()
  • take()
  • count()
  • reduce()
  • saveAsTextFile()

collect(), take()는 앞의 진도에서 사용해 본 Action입니다.

위의 함수들을 차례대로 다뤄보겠습니다.

collect()

RDD 내의 모든 값을 리턴합니다. 빅데이터를 다루고 있다면 모든 값을 호출하는 것은... 위험할 수 있습니다!

nums = sc.parallelize(list(range(10)))
nums.collect()

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

take

RDD에서 앞쪽 n개의 데이터의 list를 리턴합니다. collect()보다는 안전하게 데이터를 확인할 수 있습니다.

nums.take(3)

위 코드를 실행할 경우 무엇이 나올까요? 한 번 생각해보세요!

[0, 1, 2]

결과는 위와 같이 나옵니다. 앞에서부터 차례대로 3개가 나옵니다. take는 어렵지 않습니다!

count

RDD에 포함된 데이터 개수를 리턴합니다.

nums.count()

count() 함수는 많이 보셨을 것 같아요. 이것도 한 번 어떤 값이 출력될 지 속으로 준비해보시고...

10

네. range(10)을 입력하고 생성했었으니 count하면 10이 나옵니다!

reduce

reduce() 함수는 보신 적 있으신가요? 저는 맵리듀스를 공부하며 처음 알게 되었습니다.

MapReduce를 스파크에서 어떻게 구현할까요? Map은 transformation 함수로, Reduce는 Action 함수로 구현했습니다.

Reduce할 데이터가 RDD로 메모리상에 존재하므로 이전의 다른 구현체보다 훨씬 빠르게 MapReduce를 실행할 수 있습니다.

num.reduce(lambda x, y: x+y)

무슨 값이 나올까요? 모든 데이터를 차례차례 더하는 sum()이 구현되었네요.

0~9까지 더한 값은

45

가 되겠습니다!

saveAsTextFile

RDD 데이터를 파일로 저장합니다. 아래 코드를 실행하면 file.txt라는 파일에 RDD 내용이 저장될 것입니다.

file_path = os.getenv('HOME')+'/aiffel.bigdata_ecosystem/file.txt'
nums.saveAsTextfile(file_path)

!ls -l ~/aiffel/bigdata_ecosystem


total 8
drwxr-xr-x 2 root root 4096 Sep  3 06:33 file.txt
-rw-r--r-- 1 root root   20 Sep  3 04:43 test.txt
lrwxrwxrwx 1 root root   22 Sep  3 00:48 train.csv -> /aiffel/data/train.csv

file.txt 내용을 잘 보시면 디렉토리 타입으로 생성되어 있습니다. 이 디렉토리 안에 들어가 보면 part-0000 라는 이름의 텍스트 파일이 생성되어 있습니다.

스파크는 '분산형 빅데이터 시스템'이라는 것을 잊어서는 안 됩니다. 스파크가 다룰 파일 사이즈는 하드디스크 하나에 다 담지 못할 만큼 큰 경우일 가능성이 높습니다.

현재 실습한 건 매우 작은 RDD였지만 sc.parallelize()를 통해 분산형 데이터를 생성을 해본 것입니다!

RDD 과정 요약

# RDD 생성
rdd = sc.parallelize(range(1,100))

# RDD Transformation
rdd2 = rdd.amp(lambda x: 0.5*x - 10).filter(lambda x: x> 0)

# RDD Action
rdd2.reduce(lambda x, y: x + y)

결괏값으로 무엇이 나올까요? 암산으로 계산하기는 당연히 어렵습니다. 그렇다고 종이에 풀 것도 아니니까요! 그러므로 RDD 생성, 변환, 액션 과정을 꼭 이해해 보고 넘어가보세요!

  1. 0부터 99까지의 rdd 생성
  2. 모든 값에 0.5를 곱하고 -10한 값들 중에서 음수가 아닌 것
  3. 그리고 그 모든 값을 더한 값이 출력됩니다.

지금까진 어떠셨나요? 저는 실습 예제가 매우 쉬운 편에 속해서 거부감 없이 잘 따라 오게 되었습니다. 마지막은 진짜 맵리듀스 실습이니 꼭 마지막까지 따라와주세요~

좋은 웹페이지 즐겨찾기