해당 문서는 RDD에 대해 정리하기 위해 작성된 문서이다.
RDD의 경우, Spark 1.0 부터 지원하던 기본적인 데이터 구조로 아래와 같은 성질이 있다.
한 번 생성된 RDD의 경우, 불변의 성질이 있으며 변환된 RDD의 경우 overwrite 방식이 아닌 새로운 RDD 객체를 가진다. 또한, RDD의 경우 복원성을 부여하는데, 노드에 장애가 발생하여도 유실된 RDD를 원래대로 복구할 수 있다.
e.g.
- RDD 불변성
data = [1, 2, 3, 4, 5] distData = sc.parallelize(data) # type distData(ParallelCollectionRDD[0] at readRDDFromFile at PythonRDD.scala:274) distData.map(lambda x: x*2) # type PythonRDD[1] at RDD at PythonRDD.scala:53 distData.collect() # return [1, 2, 3, 4, 5]
Spark의 경우, 기본적으로 Lazy evaluation 개념이 존재한다. 이는 행동 연산자를 호출하기 전까지는 실제로 실행하지 않는다는 것으로, 만약 행동 연산자 호출이 일어나게 되면 RDD 계보를 확인하고 이를 바탕으로 연산 그래프를 작성 및 계산한다.
RDD의 데이터를 조작해 새로운 RDD를 생성(filter, map ...)
계산 결과 반환 또는 RDD에 특정 작업을 수행하려고 실제 계산(count, foreach...)