(Chapter 3) 16. RDD Operations :: 2015/04/08 13:21

RDD 다음 2가지 형태의 Operation 지원한다.

  • Transformation
  • Action

Transformation map, filter 같은 새로운 RDD return하는 RDD상의 operation이다. Action driver program으로 결과를 return하거나 storage 결과를 write하고, count first 같은 연산을 시작하는 operation이다. Spark에서는 transformation action 아주 다르게 취급한다. 따라서, 여러분이 수행하고자 하는 작업의 형태에 대해서 이해하는 것이 아주 중요하다. 만약 여러분이 여전히 주어진 기능에 대해서 transformation인지, action인지 혼란스럽다면 return 타입을 통해 있다. Transformation 새로운 RDD return하지만, action 다른 data type return한다.


Transformations


Transformation 새로운 RDD return하는 operation이다. Lazy evaluation section에서 논의되겠지만, transformed RDD 단지 여러분이 action에서 사용할 , 느긋하게(lazily) 계산된다. 많은 transformation(변형) element측면에서 일어난다. Transformation 한번에 하나의 element상에서 동작하지만, 모든 transformation 그런 것은 아니다.


예를 들면, 수많은 메시지를 담고 있는 log.txt라는 로그 파일을 가지고 있다고 생각해보자. 그리고 중에서 error 메시지만을 추출하고 싶다. 여기에 앞에서 보았던 filter transformation 사용할 있다. Spark 3가지 언어로 filter API 살펴보면 다음과 같다.


Example 3-8. Python filter example

inputRDD = sc.textFile("log.txt")

errorsRDD = inputRDD.filter(lambda x:"error" in x)


Example 3-9. Scala filter example

var inputRDD = sc.textFile("log.txt")

var errorsRDD = inputRDD.filter(line => line.contains("error"))


Example 3-10. Java filter example

JavaRDD<String> inputRDD = sc.textFile("log.txt");

JavaRDD<String> errorsRDD = inputRDD.filter(

    new Function<String, Boolean>() {

         public Boolean call (String x) {return x.contains("error");}

    }

);


Filter operation 기존의 inputRDD 대한 돌연변이가 아님에 주의하라. 전혀 새로운 RDD 대한 포인터를 return한다. inputRDD 프로그램내에서-예를 들어, 다른 단어들을 검색하는데-나중에 재사용할 있다. Warning이라는 단어를 검색하는데 inputRDD 사용해보자. , 새로운 transformation union 사용하여 error warning 단어를 포함하고 있는 모든 line 출력할 있다. 이에 대한 Python code 있지만, union() function 3가지 언어에서 모두 동일하다.


Example 3-11. Python union example

errorsRDD = inputRDD.filter(lambda x:"error" in x)

warningsRDD = inputRDD.filter(lambda x:"warning" in x)

badLinesRDD = errorsRDD.union(warningsRDD)


union filter와는 약간 다르다. 하나의 RDD 아니라 2개의 RDD 가지고 동작하기 때문이다. Transformation 복수 개의 input RDD 가지고 동작할 있다.


끝으로, transformation 사용하여 서로 다른 새로운 RDD 이끌어낼 , Spark 다른 RDD 사이의 dependency 집합을 추적하고 유지한다. 그것을 lineage graph라고 한다. Spark 요구에 맞춰 RDD 계산할 , 정보를 이용하고 Persistent RDD 일부 정보가 유실되었을 , 이를 이용해 복구한다.



<Figure 3-1. RDD lineage graph created during log analysis>

2015/04/08 13:21 2015/04/08 13:21
Trackback Address :: http://www.yongbi.net/trackback/681
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다
Name
Password
Homepage

Secret
< PREV |  1  |  ...  121  |  122  |  123  |  124  |  125  |  126  |  127  |  128  |  129  |  ...  566  |  NEXT >